Skip to content
Merged

Dev #26

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,10 @@ VIRUSTOTAL_API_KEY="your_virustotal_api_key"
# Email Configuration (Resend)
RESEND_API_KEY="re_your_resend_api_key"
EMAIL_FROM="Your App <noreply@yourdomain.com>"

# Instatus API Configuration (for status page)
# Get API key from: User settings → Developer settings
# Get Page ID from: Dashboard → click <> button → Visit Page (auto-copied)
INSTATUS_API_KEY="your_instatus_api_key"
INSTATUS_PAGE_ID="your_instatus_page_id"
INSTATUS_STATUS_URL="https://status.yourdomain.com"
25 changes: 1 addition & 24 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,14 @@ on:
push:
branches: [ master ]
pull_request:
branches: [ master, development ]
branches: [ master, dev ]

jobs:
build:
name: Build Check
runs-on: ubuntu-latest
permissions:
contents: read

services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: emberly_test
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5

steps:
- uses: actions/checkout@v4
Expand All @@ -48,17 +33,9 @@ jobs:

- name: Generate Prisma Client
run: bun x prisma generate
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/emberly_test

- name: Run Prisma Migrations
run: bun x prisma migrate deploy
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/emberly_test

- name: Build
run: bun run build
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/emberly_test
NEXTAUTH_SECRET: test-secret
NEXTAUTH_URL: http://localhost:3000
2 changes: 1 addition & 1 deletion .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
push:
branches: [ master ]
pull_request:
branches: [ master, development ]
branches: [ master, dev ]

jobs:
code-quality:
Expand Down
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,26 @@ All notable changes to this project will be documented in this file.

The format is based on "Keep a Changelog" and follows [Semantic Versioning](https://semver.org/).

## [1.4.0] - 2025-12-29
## [1.4.0] - 2026-01-01

### Added
- **Public User API Access** - Added `/api/users` to public paths for contribution stats visibility.
- Public profiles can now display GitHub contribution statistics without authentication.
- Ensures contribution data is accessible for public profile pages.
- **Custom Status Page System** - Comprehensive system status page powered by Instatus API integration.
- New `/status` page displaying real-time service health, incidents, and maintenance windows.
- TypeScript types for full Instatus API coverage (`packages/types/instatus.ts`): `StatusSummary`, `StatusComponent`, `Incident`, `Maintenance`, and related interfaces.
- Instatus client library (`packages/lib/instatus/index.ts`) with public and authenticated API support.
- Supports both public API (`/summary.json`, `/v2/components.json`) and authenticated API (`/v2/:page_id/...`) with Bearer token.
- Environment variables: `INSTATUS_API_KEY`, `INSTATUS_PAGE_ID`, `INSTATUS_STATUS_URL` for configuration.
- API routes: `/api/status`, `/api/status/components`, `/api/status/incidents`, `/api/status/maintenances`.
- Status components: `StatusBadge`, `StatusIcon`, `StatusHeader`, `ComponentsList`, `ActiveIncidentsPanel`, `ActiveMaintenancesPanel`, `IncidentHistory`, `MaintenanceHistory`, `UptimeDisplay`, `StatusPageSkeleton`.
- Tabbed interface organizing Components, Incidents, and Maintenances with count badges.
- Glass-morphism styling consistent with rest of site using `GlassCard` components.
- Expandable incident/maintenance cards showing update timelines with HTML message support.
- Parent-child component hierarchy built dynamically from flat API responses using `group.id` references.
- Auto-refresh capability with manual refresh button and last-updated timestamps.
- Responsive design with mobile-optimized tab navigation.

### Changed
- **Environment Variable Consolidation** - Unified domain configuration to use existing `NEXT_PUBLIC_BASE_URL`.
Expand Down Expand Up @@ -39,6 +53,10 @@ The format is based on "Keep a Changelog" and follows [Semantic Versioning](http
- Added individual try-catch blocks around commit detail fetches to prevent single failures from breaking entire stats.
- Improved error handling with specific error logging per commit and repository.
- Stats calculation (additions, deletions, files changed) now properly accumulates even with partial failures.
- **Press Pages Theme Compatibility** - Fixed hardcoded colors to respect active theme.
- Press page hero section now uses theme variables (`text-foreground`, `text-primary`) instead of hardcoded colors.
- Media kit color palette dynamically pulls from CSS variables to display actual theme colors.
- Color swatches show live theme values with proper hex code extraction from computed styles.

### Fixed
- **Authentication System Domain Configuration** - Resolved production OAuth redirects incorrectly using `https://localhost:3000`.
Expand Down
133 changes: 133 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in the Emberly community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

## Our Standards

### Positive Behavior

Examples of behavior that contributes to a positive environment:

- **Be Respectful** - Treat everyone with respect and consideration
- **Be Inclusive** - Welcome newcomers and help them get started
- **Be Constructive** - Provide helpful feedback and accept it gracefully
- **Be Collaborative** - Work together towards common goals
- **Be Patient** - Remember that everyone was a beginner once
- **Be Professional** - Maintain professional conduct in all interactions
- **Give Credit** - Acknowledge others' contributions and ideas
- **Focus on Community** - Prioritize what's best for the community

### Unacceptable Behavior

Examples of unacceptable behavior:

- **Harassment** - Any form of harassment, intimidation, or discrimination
- **Trolling** - Inflammatory, derogatory, or insulting comments
- **Personal Attacks** - Ad hominem attacks or insults
- **Sexual Content** - Sexualized language, imagery, or unwelcome advances
- **Doxxing** - Publishing others' private information without permission
- **Spam** - Unsolicited promotional content or repetitive messages
- **Disruption** - Sustained disruption of discussions or events
- **Threats** - Threats of violence or violent language
- **Impersonation** - Pretending to be someone else

## Scope

This Code of Conduct applies within all community spaces, including:

- GitHub repositories (issues, pull requests, discussions)
- Discord server
- Social media channels
- Community events (online and in-person)
- Direct communications related to the project

This Code of Conduct also applies when an individual is officially representing the community in public spaces.

## Enforcement

### Reporting

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at:

- **Email**: [hey@embrly.ca](mailto:hey@embrly.ca)
- **Discord**: Contact a moderator directly

All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter.

### What to Include

When reporting, please include:

1. Your contact information
2. Names (usernames) of individuals involved
3. Description of the behavior
4. Date and location (channel, repository, etc.)
5. Any additional context or screenshots
6. Whether you've previously contacted anyone about this

### Confidentiality

All reports will be handled with discretion. We will not disclose the identity of reporters without their explicit consent, except as required by law.

## Enforcement Guidelines

Community leaders will follow these guidelines in determining consequences:

### 1. Correction

**Community Impact**: Minor inappropriate behavior or first-time offense.

**Consequence**: Private written warning with clarity around the violation and why it was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: Violation through a single incident or series of actions.

**Consequence**: Warning with consequences for continued behavior. No interaction with involved parties for a specified period. Violating these terms may lead to a temporary or permanent ban.

### 3. Temporary Ban

**Community Impact**: Serious violation, including sustained inappropriate behavior.

**Consequence**: Temporary ban from all community spaces for a specified period. No public or private interaction with community members during this time. Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Pattern of violations, harassment, or aggression toward individuals or groups.

**Consequence**: Permanent ban from all community interaction and spaces.

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior. They have the right and responsibility to:

- Remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned with this Code of Conduct
- Temporarily or permanently ban any contributor for behaviors deemed inappropriate, threatening, offensive, or harmful
- Communicate reasons for moderation decisions when appropriate

## Appeals

If you believe you have been falsely or unfairly accused of violating this Code of Conduct, you may appeal the decision by contacting [hey@embrly.ca](mailto:hey@embrly.ca) with a concise description of your grievance. Appeals will be reviewed by community leaders not involved in the original decision.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).

Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).

---

## Questions?

If you have questions about this Code of Conduct, please reach out:

- **Email**: [hey@embrly.ca](mailto:hey@embrly.ca)
- **Discord**: [discord.gg/A8c58ScRCj](https://discord.gg/A8c58ScRCj)

---

*Last updated: January 1, 2026*
Loading
Loading