Files
web-app-launcher/plans/mvp-web-app-launcher/phase-1-scaffolding.md
T
alexei.dolgolyov 1c0a7cb850 feat: Phases 4-7 — Full Feature Expansion (26 features)
Phase 4 — New Widget Types:
- Clock/Weather, System Stats, RSS/Feed, Calendar, Markdown,
  Metric/Counter, Link Group, Camera/Stream widgets
- Backend services with caching for each data source
- Full creation form with dynamic config fields per type

Phase 5 — Visual & Styling Enhancements:
- Glassmorphism card style (solid/glass/outline)
- Board-level themes with per-board hue/saturation
- Animated SVG status rings replacing static dots
- Card size options (compact/medium/large)
- Custom CSS injection (admin + per-board, sanitized)
- Wallpaper backgrounds with blur/overlay/parallax

Phase 6 — Functional Features:
- Favorites bar with drag-and-drop reordering
- Recent apps tracking with privacy toggle
- Uptime dashboard page (/status, guest-accessible)
- Notifications system (Discord/Slack/Telegram/HTTP webhooks)
- App tags with filtering in board view
- Multi-URL app cards with expandable sub-links
- Personal API tokens with scoped permissions
- Audit log with retention and admin viewer

Phase 7 — Quality of Life:
- Onboarding wizard (5-step first-launch setup)
- App URL health preview with favicon/title detection
- Board templates (4 built-in + custom import/export)
- Keyboard shortcut overlay (j/k nav, 1-9 boards, ? help)

212 files changed, 15641 insertions, 980 deletions.
Build, lint, type check, and 222 tests all pass.
2026-03-25 14:18:10 +03:00

86 lines
3.8 KiB
Markdown

# Phase 1: Project Scaffolding & Tooling
**Status:** ✅ Complete
**Parent plan:** [PLAN.md](./PLAN.md)
**Domain:** backend
## Objective
Initialize the SvelteKit project with the full toolchain: TypeScript strict, Svelte 5, Tailwind CSS v4, shadcn-svelte, Prisma + SQLite, Vitest, ESLint, Prettier. Create the Docker and CI configuration.
## Tasks
- [x] Task 1: Initialize SvelteKit project with TypeScript, Svelte 5 adapter-node
- [x] Task 2: Install and configure Tailwind CSS v4
- [x] Task 3: Install and configure shadcn-svelte (Bits UI primitives)
- [x] Task 4: Install Prisma, configure SQLite provider, create initial empty schema
- [x] Task 5: Install Vitest and configure for SvelteKit
- [x] Task 6: Configure ESLint + Prettier for Svelte/TS
- [x] Task 7: Install runtime dependencies: lucide-svelte, simple-icons, superforms, zod, bcryptjs, jsonwebtoken, node-cron
- [x] Task 8: Create `.env.example` with all required env vars
- [x] Task 9: Create `Dockerfile` (multi-stage build)
- [x] Task 10: Create `docker-compose.yml`
- [x] Task 11: Create `.gitea/workflows/ci.yml` (lint, type-check, test, Docker build)
- [x] Task 12: Create `app.css` with Tailwind base + CSS custom properties for theming
- [x] Task 13: Create `app.d.ts` with SvelteKit type augmentation (Locals, Session)
## Files to Modify/Create
- `package.json` — project config with all dependencies and scripts
- `svelte.config.js` — SvelteKit config with adapter-node
- `vite.config.ts` — Vite config with Vitest
- `tsconfig.json` — TypeScript strict config
- `tailwind.config.ts` — Tailwind v4 config
- `src/app.css` — Tailwind imports + theme variables
- `src/app.d.ts` — SvelteKit type augmentation
- `src/app.html` — HTML template
- `prisma/schema.prisma` — empty schema with SQLite datasource
- `.env.example` — template env vars
- `Dockerfile` — multi-stage Node build
- `docker-compose.yml` — single-service deployment
- `.gitea/workflows/ci.yml` — CI pipeline
- `eslint.config.js` — ESLint flat config
- `.prettierrc` — Prettier config
## Acceptance Criteria
- `npm install` succeeds
- Project structure matches SvelteKit conventions
- All config files are valid
- Dockerfile builds (structure-wise, not the app itself yet)
## Notes
- Use `@sveltejs/adapter-node` for Docker deployment
- Svelte 5 runes mode is the default in latest SvelteKit — no special config needed
- Tailwind v4 uses the new CSS-based config approach
- ⚠️ Big Bang: build will not pass yet — no routes or components exist
## Review Checklist
- [ ] All tasks completed
- [ ] Code follows project conventions
- [ ] No unintended side effects
- [ ] Build passes
- [ ] Tests pass (new + existing)
## Handoff to Next Phase
Phase 1 scaffolding is complete. All tooling is configured and `npm install` succeeds.
**What's ready for Phase 2:**
- Prisma is installed with SQLite datasource configured at `prisma/schema.prisma` — add models there.
- `@prisma/client` is a devDependency; run `npx prisma generate` after adding models.
- `DATABASE_URL` defaults to `file:../data/launcher.db` (see `.env.example`).
- SvelteKit project structure is in place: `src/routes/+page.svelte`, `src/app.html`, `src/app.css`, `src/app.d.ts`.
- `App.Locals` type augmentation defines `user` and `session` — align with the User model in Phase 2.
- shadcn-svelte is configured via `components.json` — add UI components with `npx shadcn-svelte@latest add <component>`.
- `src/lib/utils/cn.ts` provides the `cn()` class-merge utility used by shadcn-svelte components.
**Known gaps (expected for Big Bang strategy):**
- `npm run build` will fail until SvelteKit routes and server hooks are wired up.
- `npm run check` will fail until `.svelte-kit/` is generated via `svelte-kit sync`.
- No tests exist yet — `npm test` will pass vacuously (no test files).