Files
wedding-website/plans/milestone-01-infra-db.md
T
Raul Lugo 4ced446c9c
Build & Deployment / Build & Deploy (push) Failing after 5s
initial commit
2026-08-10 17:55:26 +02:00

107 lines
3.0 KiB
Markdown

# Milestone 01 — Infrastructure and Database Foundation
## Reference
Read `plans/wedding-bootstrap-plan.md` first. It is the source of truth for architecture, naming, schema intent, and constraints.
## Goal
Create the local/runtime foundation for the app: dependencies, Docker Compose services, environment template, Kysely database client, SQL migration script, and initial schema.
## Scope
Implement only:
- Required dependencies for PostgreSQL, Kysely, migrations, validation, auth/upload placeholders where needed.
- `docker-compose.yml` with PostgreSQL and MinIO services, plus MinIO bucket initialization.
- `.env.example` with all required bootstrap variables.
- Typed config helper.
- Kysely PostgreSQL client.
- Node `.mjs` SQL migration runner under `scripts/`.
- Initial pure SQL migration for the core schema.
- Initial database typings, either hand-written or generated if practical.
- Package scripts needed to run migrations.
## Non-goals
Do not implement:
- Google auth.
- `/admin` pages.
- shadcn UI setup unless strictly required by project initialization.
- Guest RSVP pages.
- MinIO upload endpoints.
- Presigned upload logic.
- Song/toast/message forms.
- Final visual design.
## Required constraints
- Use PostgreSQL.
- Use Kysely. Do not add Prisma, Drizzle, TypeORM, Sequelize, or another ORM.
- Keep SQL schema aligned with `wedding-bootstrap-plan.md`.
- `invitations.language` is required from the first migration.
- `invitation_members.attending` is the source of truth for attendance.
- Do not duplicate attendance status on `invitation_responses`.
- `photo_uploads.invitation_id` must be unique to enforce one photo per invitation.
## Implementation tasks
- Add dependencies:
- `kysely`
- `pg`
- `zod`
- `nanoid`
- AWS S3 packages if useful to install now
- Add dev dependencies:
- `@types/pg`
- `kysely-codegen` if used
- Add `.env.example`.
- Add `docker-compose.yml` with:
- `postgres`
- `minio`
- `minio-init`
- Add `lib/config.ts` for server-side env parsing.
- Add `lib/db/client.ts`.
- Add `scripts/migrate-sql.mjs`.
- Add `migrations/0001_initial_schema.sql`.
- Add `lib/db/types.ts`.
- Add package scripts:
- `db:migrate`
- optionally `db:generate` if using `kysely-codegen`
## Initial tables
Create:
- `invitations`
- `invitation_members`
- `invitation_responses`
- `photo_uploads`
- `song_requests`
- `toast_requests`
- `guest_messages`
- optionally `admin_audit_events`
## Verification
Run:
```bash
docker compose up -d postgres minio minio-init
npm run db:migrate
npm run lint
npm run build
```
If Docker is unavailable in the execution environment, still implement the files and clearly report that Docker verification could not be run.
## Acceptance criteria
- Docker Compose defines working PostgreSQL and MinIO services.
- `.env.example` documents all required variables.
- Migrations create the planned schema.
- The Node `.mjs` migration script can run pure SQL files against PostgreSQL.
- The app still passes lint/build.
- No future milestone features were implemented.