mirror of
https://github.com/bretzel-app/crumbs.git
synced 2026-10-12 12:06:57 +02:00
refactor: isolate auth layout, unify tags, add editor animation and pin indicator
- Create (auth) and (app) layout groups to isolate login/setup pages from the main app chrome (header, sidebar, footer) - Use window.location.href instead of goto() after login/setup to ensure clean full-page load across layout groups - Add reusable TagChip component, used in TagFilter and NoteCard - Add fade-in/pop-in entrance animation to note editor overlay - Add persistent clickable pin indicator on pinned cards (top-right bookmark icon, replaces hover-only pin button for pinned notes) - Improve "Add a crumb..." button with + icon and dashed border - Update CLAUDE.md with retro parchment design system guidelines - Add /.claude/ to .gitignore Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
eb18242f5a
commit
f4bd2c12d3
@@ -14,21 +14,73 @@ Crumbs by Bretzel — self-hostable note-taking app. Single-user, offline-first
|
||||
- **PWA**: `@vite-pwa/sveltekit` for service worker and offline caching
|
||||
- **Package manager**: pnpm
|
||||
|
||||
## Design system: Retro Parchment
|
||||
|
||||
The UI follows a **parchment + 8-bit retro** aesthetic. All design decisions must preserve this character.
|
||||
|
||||
### Color palette
|
||||
|
||||
All colors are CSS variables in `src/app.css`. Never use hardcoded Tailwind colors (e.g. `text-gray-500`, `bg-red-600`) — always reference CSS variables:
|
||||
|
||||
| Variable | Value | Usage |
|
||||
|---|---|---|
|
||||
| `--bg-base` | `#f0e6d3` | Page background (warm parchment) |
|
||||
| `--bg-surface` | `#faf5eb` | Cards, panels, inputs |
|
||||
| `--primary` | `#C8860A` | Brand gold — links, active states, accents |
|
||||
| `--primary-hover` | `#E8A020` | Gold hover state |
|
||||
| `--text` | `#1a1a2e` | Primary text (near-black) |
|
||||
| `--text-muted` | `#6b6272` | Secondary text, placeholders |
|
||||
| `--border` | `#1a1a2e` | Strong borders (editor, login card) |
|
||||
| `--border-subtle` | `#d4cabb` | Default card borders, dividers |
|
||||
| `--destructive` | `#a63d2f` | Delete actions, error icons |
|
||||
| `--error-bg/border/text` | warm reds | Error states (themed, not clinical red) |
|
||||
| `--success-bg/text` | warm greens | Success states |
|
||||
| `--card-shadow` | `2px 2px 0px` | Hard-offset retro shadow (no blur) |
|
||||
| `--card-shadow-hover` | `3px 3px 0px` | Hover shadow in primary gold |
|
||||
|
||||
Note colors for cards are defined in `src/lib/utils/colors.ts`.
|
||||
|
||||
### Typography
|
||||
|
||||
- **Body**: `JetBrains Mono` (monospace) — the hacker/dev aesthetic
|
||||
- **Brand / empty states**: `Press Start 2P` (pixel font) — the 8-bit accent
|
||||
- These two fonts are intentional. Do not replace them or add others.
|
||||
|
||||
### Visual rules
|
||||
|
||||
- **Shadows**: Always hard-offset (`2px 2px 0px`) with zero blur. Never use `shadow-sm`, `shadow-md` etc. — they look too modern.
|
||||
- **Corners**: `rounded-sm` everywhere. Sharp, not rounded. Exception: color picker circles use `rounded-full`.
|
||||
- **Borders**: Default card borders use `--border-subtle`. `--border` is for strong emphasis (editor, login card). Hover borders use `--primary`.
|
||||
- **Animations**: Crisp and fast (150ms `ease-out`). No spring physics, no bounce. The retro feel comes from snappy transitions.
|
||||
- **Background texture**: A subtle 4px pixel grid overlay at 3% opacity (defined in `body::before`).
|
||||
- **Checkboxes**: Use `accent-color: var(--primary)` globally — gold checkboxes match the theme.
|
||||
- **Icons**: Lucide icons throughout. Keep at 16-20px size.
|
||||
|
||||
### Layout groups
|
||||
|
||||
- `(auth)` — Login/setup pages: minimal centered layout, no app chrome
|
||||
- `(app)` — Main app: header, sidebar, footer, toast notifications
|
||||
|
||||
## Project structure
|
||||
|
||||
```
|
||||
src/
|
||||
routes/ # SvelteKit pages and API routes
|
||||
+page.svelte # Main notes view
|
||||
login/ # Login page
|
||||
setup/ # First-time password setup
|
||||
routes/
|
||||
+layout.svelte # Root layout (imports CSS only)
|
||||
(auth)/ # Layout group: login/setup (minimal, no app chrome)
|
||||
+layout.svelte # Centered parchment background
|
||||
login/ # Login page
|
||||
setup/ # First-time password setup
|
||||
(app)/ # Layout group: main app (header, sidebar, footer)
|
||||
+layout.svelte # App shell with Header, Sidebar, Toast
|
||||
+page.svelte # Main notes view
|
||||
api/auth/ # Login, logout, setup endpoints
|
||||
api/notes/ # CRUD + attachments
|
||||
api/search/ # Full-text search
|
||||
api/sync/ # Offline sync
|
||||
api/tags/ # Tag management
|
||||
lib/
|
||||
components/ # Svelte components (NoteCard, NoteEditor, ColorPicker, etc.)
|
||||
components/ # Svelte components (NoteCard, NoteEditor, TagChip, etc.)
|
||||
stores/ # Svelte stores (notes.ts, theme.ts)
|
||||
server/db/ # Drizzle schema + connection (schema.ts, index.ts)
|
||||
server/ # Auth logic, attachment handling
|
||||
|
||||
Reference in New Issue
Block a user