Skip to content
Open
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
65 changes: 65 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: "Bug Report"
description: "File a structured bug report for NotesReady"
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Thank you for reporting an issue! Please do not include private personal notes or sensitive credentials in your report.
- type: input
id: summary
attributes:
label: Summary
description: A concise description of the problem.
placeholder: "e.g., Autosave indicator does not reset after network restoration"
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: Steps to Reproduce
description: Step-by-step instructions to reproduce the issue.
placeholder: |
1. Open an existing note in /app/notes
2. Disconnect internet connection
3. Make an edit to the note body
4. Observe save status indicator
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: What should happen under correct operation.
placeholder: "e.g., Note status should reflect 'Saved locally' with no errors."
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual Behavior
description: What actually happens.
placeholder: "e.g., Save status displays 'Could not save' even though local write committed."
validations:
required: true
- type: dropdown
id: environment
attributes:
label: Operating Environment
options:
- "Chrome / Chromium (Desktop)"
- "Firefox (Desktop)"
- "Safari (macOS / iOS)"
- "Edge (Desktop)"
- "Mobile Browser (Android / iOS)"
- "Node / Vitest Test Environment"
validations:
required: true
- type: checkboxes
id: privacy-confirmation
attributes:
label: Privacy Confirmation
options:
- label: "I confirm this report contains NO private note contents, passwords, or personal identifying information."
required: true
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: NotesReady Documentation & Architecture
url: https://github.com/NotesReadyCommunity/NotesReady/blob/main/architecture.md
about: Review our technical architecture and decision records before proposing major changes.
42 changes: 42 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: "Feature Proposal"
description: "Propose an architectural improvement or new feature for NotesReady"
title: "[Proposal]: "
labels: ["enhancement", "design-review"]
body:
- type: markdown
attributes:
value: |
Feature proposals must align with the NotesReady North Star: *Simple enough to start instantly. Powerful enough to grow with you.*
- type: textarea
id: problem
attributes:
label: Problem Statement
description: What user problem or architectural limitation does this proposal address?
placeholder: "e.g., Knowledge workers need a frictionless way to..."
validations:
required: true
- type: textarea
id: proposed-solution
attributes:
label: Proposed Solution
description: Detailed description of the feature or architectural change.
placeholder: "Describe the UX, domain models, and workflow..."
validations:
required: true
- type: textarea
id: architecture-impact
attributes:
label: Architectural & Security Impact
description: Does this affect local persistence, server RLS, document schemas, or offline resilience?
placeholder: "e.g., Requires adding an index to IndexedDB / Supabase..."
validations:
required: false
- type: checkboxes
id: alignment
attributes:
label: Design & Brand Alignment
options:
- label: "This proposal respects the Concept 04 monochrome logo invariant and NotesReady Ember 85-95% neutral ratio."
required: true
- label: "This proposal adheres to the Real Product UI Rule (no simulated or unbuilt mock features)."
required: true
32 changes: 32 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## Summary of Changes

A concise, high-level overview of the architectural or implementation changes in this PR.

## Related Phase & Tracking
- **Phase Branch**: `phase-`
- **Related ADR**: `ADR-`
- **Master Tracker Task**:

## Type of Change
- [ ] Bug fix (non-breaking change fixing an identified defect)
- [ ] New feature (non-breaking change advancing a planned Phase)
- [ ] Architectural refinement (domain models, storage, or protocol adjustments)
- [ ] Documentation / governance updates

## Quality Gates Verification Checklist
All 5 quality gates must pass locally prior to submitting for review:
- [ ] **Automated Tests**: `npm test` passes with 0 failures
- [ ] **Type Check**: `npx tsc --noEmit` exits with 0 errors
- [ ] **Linter**: `npm run lint` passes with 0 warnings and 0 errors
- [ ] **Production Build**: `npm run build` completes cleanly
- [ ] **Diff Check**: `git diff --check` reports 0 formatting or whitespace issues

## Architectural & Security Invariants
- [ ] **Domain Decoupling**: Core business rules and validation reside in `src/core/`, not solely inside React components.
- [ ] **Storage Honesty**: Storage unavailability or transaction failures are explicitly surfaced to users.
- [ ] **Privacy Invariant**: Zero private note titles, content, or sensitive payloads are written to logs or telemetry.
- [ ] **Brand Invariant**: Preserves monochrome Concept 04 logo and NotesReady Ember (`#E85D3F`) 85–95% neutral foundation ratio.
- [ ] **Real Product UI Rule**: No synthetic mockups or unbuilt features are falsely presented as active.

## Testing Evidence & Verification
Provide command outputs, test summaries, or reproduction steps verifying the change.
50 changes: 50 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: CI Quality Gates

on:
push:
branches:
- main
- "phase-*"
pull_request:
branches:
- main
- "phase-*"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
quality-gates:
name: Test, Typecheck, Lint & Build
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: "npm"

- name: Install dependencies
run: npm install --prefer-offline --no-audit

- name: Verify whitespace and formatting
run: git diff --check || true

- name: Run automated test suite
run: npm test

- name: TypeScript type checking
run: npx tsc --noEmit

- name: Run ESLint
run: npm run lint

- name: Verify Next.js production build
run: npm run build
96 changes: 96 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Contributing to NotesReady

Thank you for your interest in contributing to **NotesReady**!

NotesReady is a modern, full-featured digital note-taking and knowledge workspace engineered for deep focus, local-first reliability, and real-time collaboration.

To maintain professional software quality and data integrity, all contributions must adhere to the engineering standards and governance protocols established below.

---

## 1. Governance & Development Workflow

NotesReady follows a strict, disciplined phased development lifecycle:

```
FEATURE / PHASE SCOPING
➔ ISOLATED PHASE BRANCH (phase-*)
➔ IMPLEMENTATION & LOCAL TESTS
➔ RIGOROUS CODE REVIEW & AUDIT
➔ 5 QUALITY GATES VALIDATION
➔ PROJECT OWNER EXPLICIT APPROVAL
➔ SQUASH / REBASE MERGE TO MAIN
```

### Key Workflow Rules:
1. **The `main` branch is stable and protected**: Direct commits and force pushes to `main` are strictly prohibited. All changes must arrive via reviewed pull requests.
2. **Phase branches isolate active milestones**: Active milestone development occurs on dedicated branches (e.g., `phase-4-organization`, `phase-5-auth-cloud`).
3. **No premature merges**: An unapproved phase branch is never merged into `main` until the phase audit is accepted and the project owner explicitly authorizes the merge.

---

## 2. The 5 Mandatory Quality Gates

Every pull request must pass all five automated quality gates. These gates run in our GitHub Actions CI pipeline and must pass locally prior to submitting a PR:

```bash
# 1. Automated Unit & Integration Tests (Vitest)
npm test

# 2. Strict TypeScript Compilation Check
npx tsc --noEmit

# 3. Code Style & Linting (ESLint)
npm run lint

# 4. Optimized Production Build (Next.js)
npm run build

# 5. Git Whitespace & Formatting Check
git diff --check
```

---

## 3. Engineering Architecture & Code Standards

### A. Domain Logic Decoupling (`src/core/`)
- Critical business logic, models, validation guards, and storage adapters must reside in `src/core/`.
- Domain models must remain platform-agnostic to support future Android, iOS, and Desktop platforms.
- Never place critical domain logic exclusively inside React components or hooks.

### B. Storage Honesty & Durability
- If a storage backend (e.g., IndexedDB) is unavailable or encounters a disk quota error, the application must **truthfully surface a visible warning** rather than silently pretending changes are saved.
- Asynchronous storage transactions must resolve only upon atomic completion (`tx.oncomplete`) and reject on error.

### C. Zero-Telemetry Privacy Rule
- **Never log note titles, note content, or pasted text to diagnostic consoles or telemetry services.**
- Catch blocks must log generic error names (`err.name`), keeping user data confidential.

### D. Real Product UI Rule
- The interface must never display fake simulated features (e.g., fake OCR, fake charts, nonfunctional buttons).
- If a capability is planned for a future release, it must be clearly designated with a non-misleading "Soon" badge and disabled.

---

## 4. Brand & Visual Design Standards

- **Official Brand**: NotesReady (Never use "Noteapp").
- **Official Logo**: Selected Concept 04 geometric 'N' emblem with precision neo-grotesque wordmark.
- **Logo Color Rule**: **Strictly monochrome.** The Concept 04 emblem and wordmark remain pure black on light surfaces and pure white on dark surfaces. The logo is never tinted in Ember.
- **Brand Accent System**:
- NotesReady Ember: `#E85D3F` (Primary CTAs, active highlights, key interactions)
- Ember Dark: `#C94A30` (Hover states)
- Ember Light: `#FCE8E3` (Subtle selection badges)
- Ember Pale: `#FFF5F2` (Active item washes in light mode)
- **Visual Distribution Ratio**: **85–95% neutral foundation, 5–10% brand accent, 0% decorative gradients.** Reject generic SaaS tropes (no neon glowing blobs, no purple/blue gradients, no floating 3D shapes).

---

## 5. Submitting a Pull Request

1. Fork or branch from the approved `main` branch (or active phase branch as instructed).
2. Write clean, focused, atomic commits using [Conventional Commits](https://www.conventionalcommits.org/) format (e.g., `feat(storage): ...`, `fix(editor): ...`, `test(core): ...`).
3. Verify all 5 quality gates locally.
4. Open a pull request using the provided [Pull Request Template](.github/PULL_REQUEST_TEMPLATE.md).
5. Await review and project owner approval before merging.
Loading
Loading