b192cd53ba
- Add comprehensive project overview and core philosophy - Document file structure reference for the codebase - Create key files reference table for task-specific guidance - Include multi-tenant guidelines and site resolution flow
585 lines
28 KiB
Markdown
585 lines
28 KiB
Markdown
# Identity Adaptation Plan: The Web Cooperative → The Collective Hub
|
|
|
|
> **Goal:** Rewrite all project identity files from "The Web Cooperative" (marketing agency for small businesses) to "The Collective Hub" (multi-tenant SvelteKit template system for theater/community landing pages).
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [AGENTS.md — Master Rewrite](#1-agentsmd--master-rewrite)
|
|
2. [.github/copilot-instructions.md — Rewrite](#2-githubcopilot-instructionsmd--rewrite)
|
|
3. [.github/instructions/ — Instruction Files](#3-githubinstructions--instruction-files)
|
|
4. [.github/prompts/ — Prompt Templates](#4-githubprompts--prompt-templates)
|
|
5. [.github/workflows/ — CI/CD Workflows](#5-githubworkflows--cicd-workflows)
|
|
6. [Summary: Files to Create vs Keep vs Delete](#6-summary-files-to-create-vs-keep-vs-delete)
|
|
7. [Execution Order](#7-execution-order)
|
|
|
|
---
|
|
|
|
## 1. AGENTS.md — Master Rewrite
|
|
|
|
**Action:** Full rewrite (~90% new content, ~10% salvageable structure)
|
|
|
|
### Section-by-Section Plan
|
|
|
|
| Section | Current (The Web Cooperative) | Target (The Collective Hub) |
|
|
|---------|------------------------------|-----------------------------|
|
|
| **Title** | "The Web Cooperative — AI Agent Instructions" | "The Collective Hub — AI Agent Instructions" |
|
|
| **Section 1: Project Identity** | Marketing help for small businesses: jargon-free, practical | Multi-tenant SvelteKit website template system for launching branded landing pages for online theater hosts, watch-party communities, and Discord communities. One codebase → multiple deployed sites → one shared database + CDN. |
|
|
| **Section 2: Services Offered** | 7 subsections of marketing services (strategy, SEO, ads, AI automation, etc.) | Replace with **Platform Capabilities** covering: multi-deployment model, site resolution, admin panel, public site rendering, CDN/assets, auth/roles, events/scheduling, theming/branding |
|
|
| **Section 3: Target Audience** | Small business owners, local service providers | Replace with **three personas**: David (system maintainer), Site Owners (theater hosts), Site Visitors (community members) — each with distinct needs and access levels |
|
|
| **Section 4: Project Structure** | Old `src/` structure with EspoCRM, marketing components | Update directory tree to match actual codebase — reflect `hooks.server.ts`, `site-resolver.ts`, `db/` schema, admin routes, asset management, CDN helpers |
|
|
| **Section 5: How AI Agents Should Operate** | Marketing-focused: write for small biz owners, budget-conscious, content generation principles | **Rewrite for development context:** Follow architecture patterns (siteId scoping, multi-tenant queries), respect phase roadmap (Phase 1 first), never write site-specific conditionals, prefer JSON settings over migrations, maintain Docker/Coolify compatibility |
|
|
| **Section 6: Hard Rules** | 9 marketing rules (no jargon, budget-conscious, templates, etc.) | **Replace with 10 dev-hard-rules:** (1) Always filter by `siteId`, (2) Store CDN keys not URLs, (3) One deployment runs migrations, (4) No site-specific conditionals, (5) Never commit `.env`, (6) Use `$lib` aliases not relative imports, (7) Co-locate tests, (8) No `svelte-ignore` comments, (9) Prefer additive migrations, (10) Respect the phase roadmap |
|
|
| **Section 7: File Reference Index** | All marketing files + old tech references | Update to reference: new instructions, prompt templates, docs/, schema files, auth helpers, CDN utilities |
|
|
| **Section 8: Mode Responsibilities** | Marketing-focused mode descriptions | **Rewrite for dev context:** Architect plans multi-tenant architecture; Code builds SvelteKit routes, DB queries, admin pages; Debug troubleshoots multi-deploy issues, migration conflicts; Ask answers SvelteKit/Drizzle/Postgres questions |
|
|
|
|
### Specific Content Changes
|
|
|
|
- **Line 1-5**: Update `AGENTS.md` header with Collective Hub project config (add Drizzle, Better Auth, PostgreSQL to add-ons)
|
|
- **Line 9**: `# The Collective Hub — AI Agent Instructions`
|
|
- **Line 17-32**: Complete rewrite of project identity with multi-tenant description
|
|
- **Line 36-127**: Replace "Services Offered" with "Platform Capabilities" — describe the system's features (site resolution, admin panel, auth, CDN, events, theming)
|
|
- **Line 130-148**: Replace target audience with the three personas
|
|
- **Line 152-227**: Update project structure to match actual codebase (verified from `src/` listing)
|
|
- **Line 235-248**: Keep tech stack instruction references but update file references
|
|
- **Line 252-281**: Rewrite "How AI Agents Should Operate" for development — focus on architecture patterns, not marketing
|
|
- **Line 286-301**: Replace hard rules with multi-tenant development rules
|
|
- **Line 306-341**: File reference — remove all marketing file references, add new instruction/prompt files
|
|
- **Line 344-355**: Mode responsibilities — rewrite for platform development
|
|
|
|
### Attachments to File
|
|
|
|
Add link to key documentation:
|
|
- [`docs/00-project-brief.md`](docs/00-project-brief.md) — Project overview
|
|
- [`docs/01-architecture-plan.md`](docs/01-architecture-plan.md) — Architecture decisions
|
|
- [`docs/02-database-plan.md`](docs/02-database-plan.md) — Schema documentation
|
|
- [`docs/04-environment-variables.md`](docs/04-environment-variables.md) — Env var reference
|
|
- [`docs/09-risks-and-rules.md`](docs/09-risks-and-rules.md) — Critical risks to avoid
|
|
|
|
---
|
|
|
|
## 2. .github/copilot-instructions.md — Rewrite
|
|
|
|
**Action:** Full rewrite (~95% new content)
|
|
|
|
| Current | Target |
|
|
|---------|--------|
|
|
| The Web Cooperative — Copilot Instructions | The Collective Hub — Copilot Instructions |
|
|
| Marketing-focused overview and file structure | Multi-tenant platform overview, architecture principles, key file references |
|
|
| References to marketing instruction files | References to dev instruction files (multi-tenant architecture, DB schema, auth, deployment) |
|
|
| "When asked to..." table for marketing tasks | "When working on..." table for dev tasks (admin pages, API routes, DB queries, auth, assets) |
|
|
|
|
---
|
|
|
|
## 3. .github/instructions/ — Instruction Files
|
|
|
|
### 3A. Tech Instructions to KEEP (with minor updates)
|
|
|
|
These files are mostly project-agnostic and need only `applyTo` description updates and path fixes.
|
|
|
|
#### [`bits-ui.instructions.md`](.github/instructions/bits-ui.instructions.md) — Minor Update
|
|
- **Description**: Change "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Content**: Already generic — keep as-is. Just update the `description` frontmatter line.
|
|
- **Changes**: ~2 lines
|
|
|
|
#### [`components.instructions.md`](.github/instructions/components.instructions.md) — Minor Update
|
|
- **Description**: Change "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Folder structure**: Keep `ui/` and `layout/` pattern, but add note about admin components living in `src/routes/admin/`
|
|
- **Changes**: ~3 lines (description, add admin component note)
|
|
|
|
#### [`icons.instructions.md`](.github/instructions/icons.instructions.md) — Minor Update
|
|
- **Description**: Change "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Content**: Already generic — keep as-is
|
|
- **Changes**: ~1 line
|
|
|
|
#### [`svelte-ts.instructions.md`](.github/instructions/svelte-ts.instructions.md) — No Changes
|
|
- Already completely generic (no project-specific references)
|
|
- **Changes**: None
|
|
|
|
#### [`svelte5.instructions.md`](.github/instructions/svelte5.instructions.md) — Minor Update
|
|
- **Description**: Change "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Content**: Already generic — keep as-is
|
|
- **Changes**: ~1 line
|
|
|
|
#### [`tailwindcss.instructions.md`](.github/instructions/tailwindcss.instructions.md) — Minor Update
|
|
- **Description**: Change "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Path reference**: Update layout.css path if needed (currently references `src/routes/layout.css`)
|
|
- **Changes**: ~2 lines
|
|
|
|
#### [`testing.instructions.md`](.github/instructions/testing.instructions.md) — Moderate Update
|
|
- **Description**: Change "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Add**: Section on testing with multi-tenant context (mocking `locals.site`, `locals.siteSettings`, `siteId` filtering)
|
|
- **Add**: Note about testing admin auth guards
|
|
- **Keep**: All existing patterns (Vitest browser/node split, `expect.element`, co-location, requireAssertions)
|
|
- **Changes**: ~15-20 lines added
|
|
|
|
#### [`server-ts.instructions.md`](.github/instructions/server-ts.instructions.md) — Significant Update
|
|
- **Description**: Change from "The Web Cooperative website... EspoCRM API client" → "The Collective Hub platform... Drizzle schema, site resolver, auth patterns"
|
|
- **Replace Section "EspoCRM API Client"** with **"Drizzle Database Patterns"**:
|
|
- Import `db` from `$lib/server/db`
|
|
- Always filter by `siteId` from `locals`
|
|
- Use `eq`, `and`, `desc` from `drizzle-orm`
|
|
- Pattern: `const { site } = locals; const items = await db.select().from(table).where(eq(table.siteId, site.id));`
|
|
- **Replace Section "Form Actions"** with **"Admin Form Actions"**:
|
|
- Auth guard first: `if (!locals.user) throw redirect(302, '/login');`
|
|
- Validate before write
|
|
- Use `fail` for validation errors
|
|
- **Add Section "Site Context Access"**:
|
|
- `locals.site` — site record
|
|
- `locals.siteSettings` — parsed settings JSON
|
|
- `locals.user` — authenticated user (or null)
|
|
- `locals.membership` — user's role for this site (or null)
|
|
- **Keep**: Env var rules (still valid), module sections
|
|
- **Changes**: ~50% of file rewritten
|
|
|
|
### 3B. [`docs-workflow.instructions.md`](.github/instructions/docs-workflow.instructions.md) — Complete Rewrite
|
|
|
|
Current: Legal documents workflow (master services agreement, privacy policy, etc.)
|
|
Target: Development documentation workflow
|
|
|
|
**New Content:**
|
|
- **Document Inventory**: Reference the docs/ folder files (00-09)
|
|
- **Source of Truth**: The docs/ `.md` files are authoritative
|
|
- **Update Workflow**: How to update architecture docs when decisions change
|
|
- **Phase Tracking**: How to mark phase deliverables as complete in roadmap
|
|
- **Template**: Standard doc format (title, purpose, decisions, risks)
|
|
|
|
### 3C. Marketing Instructions to REPLACE (9 files → 9 new dev instruction files)
|
|
|
|
| # | Old File | New File | Purpose |
|
|
|---|----------|----------|---------|
|
|
| 1 | `brand-voice.instructions.md` | `multi-tenant-architecture.instructions.md` | Site resolution, data scoping, deployment model, env vars |
|
|
| 2 | `copywriting.instructions.md` | `database-schema.instructions.md` | All tables, relationships, indexes, migration strategy |
|
|
| 3 | `seo.instructions.md` | `auth-and-roles.instructions.md` | Better Auth, Discord OAuth, role system, super admin |
|
|
| 4 | `local-seo.instructions.md` | `deployment-guide.instructions.md` | Coolify multi-deploy, Docker, migration runner, env setup |
|
|
| 5 | `social-media.instructions.md` | `admin-panel.instructions.md` | Admin layout, auth guards, form patterns, admin pages |
|
|
| 6 | `ad-copy.instructions.md` | `cdn-and-assets.instructions.md` | CDN helpers, image upload, webp conversion, URL construction |
|
|
| 7 | `ai-automation.instructions.md` | `public-site-theming.instructions.md` | SSR-only landing page, CSS custom properties, theme presets |
|
|
| 8 | `business-ops.instructions.md` | `api-route-patterns.instructions.md` | API route conventions, asset upload, event CRUD, validation |
|
|
| 9 | `tech-help.instructions.md` | `testing-multi-tenant.instructions.md` | Multi-tenant test patterns, mocking site context, auth testing |
|
|
|
|
#### New File Details
|
|
|
|
##### 1. [`multi-tenant-architecture.instructions.md`](.github/instructions/multi-tenant-architecture.instructions.md)
|
|
|
|
**Content:**
|
|
- Overview: One codebase, multiple Coolify deployments, one database + CDN
|
|
- Site resolution flow: `env.SITE_SLUG` → `hooks.server.ts` → `site-resolver.ts` → `locals.site`
|
|
- Data scoping rule: Every table has `siteId`, every query filters by it
|
|
- Deployment model diagram: Git repo → multiple Coolify deployments
|
|
- Migration safety: `RUN_MIGRATIONS` flag, exactly one deployment runs migrations
|
|
- Environment variable conventions (shared vs per-site)
|
|
- Risk reminders: No site-specific conditionals, no hardcoded CDN URLs
|
|
|
|
##### 2. [`database-schema.instructions.md`](.github/instructions/database-schema.instructions.md)
|
|
|
|
**Content:**
|
|
- Table reference: `sites`, `users`, `memberships`, `siteSettings`, `assets`, `navLinks`, `socialLinks`, `events`
|
|
- ER diagram (Mermaid)
|
|
- Key patterns: UUID PKs, snake_case columns, timestamps on every table
|
|
- Indexing rules: `siteId` indexed on every table, unique constraints
|
|
- JSON settings pattern: `siteSettings.settings` is a JSONB column
|
|
- Migration strategy: Additive only, one deployment runs migrations
|
|
- Drizzle patterns: How to write queries, schema definitions, typed inserts
|
|
|
|
##### 3. [`auth-and-roles.instructions.md`](.github/instructions/auth-and-roles.instructions.md)
|
|
|
|
**Content:**
|
|
- Better Auth with Discord OAuth setup
|
|
- Auth flow: Login → Discord redirect → callback → session creation
|
|
- Owner bootstrap: `OWNER_DISCORD_ID` env var
|
|
- Super admin: `SUPER_ADMIN_DISCORD_IDS` env var, cross-site access
|
|
- Role hierarchy: `owner` > `admin` > `editor`
|
|
- Auth guard patterns in `+layout.server.ts`
|
|
- `locals.user`, `locals.membership` — checking access in server code
|
|
|
|
##### 4. [`deployment-guide.instructions.md`](.github/instructions/deployment-guide.instructions.md)
|
|
|
|
**Content:**
|
|
- Coolify setup: One Git repo, multiple deployments
|
|
- Dockerfile build process
|
|
- Environment variable configuration per deployment
|
|
- Migration runner: Which deployment runs migrations, deploy order
|
|
- CDN storage configuration
|
|
- Adding a new site: Create DB row → deploy with new `SITE_SLUG` → set `OWNER_DISCORD_ID`
|
|
- Troubleshooting common deployment issues
|
|
|
|
##### 5. [`admin-panel.instructions.md`](.github/instructions/admin-panel.instructions.md)
|
|
|
|
**Content:**
|
|
- Admin route structure: `src/routes/admin/`
|
|
- Auth guard pattern in `+layout.server.ts`
|
|
- Admin layout shell with navigation
|
|
- Form action patterns: validate, save, redirect with flash
|
|
- Admin pages: settings, branding, homepage editor, links, events, assets
|
|
- Svelte 5 patterns in admin forms (two-way binding, `$bindable`, event handlers)
|
|
|
|
##### 6. [`cdn-and-assets.instructions.md`](.github/instructions/cdn-and-assets.instructions.md)
|
|
|
|
**Content:**
|
|
- CDN helper at `$lib/server/cdn.ts`
|
|
- URL construction: `CDN_BASE_URL + cdnKey`
|
|
- Upload flow: accept file → validate type/size → convert to webp (sharp) → upload to CDN → store record in `assets` table
|
|
- `cdnKey` convention: `sites/{siteSlug}/{type}/{filename}`
|
|
- Asset library browsing patterns
|
|
- Never store full URLs, only keys
|
|
|
|
##### 7. [`public-site-theming.instructions.md`](.github/instructions/public-site-theming.instructions.md)
|
|
|
|
**Content:**
|
|
- Public site: SSR-only single page, no client-side routing beyond initial load
|
|
- Section structure: `Hero → About → Events → Social Links → Footer`
|
|
- Theme system: CSS custom properties generated from `siteSettings.theme`
|
|
- Preset support: dark, light, custom presets
|
|
- Dynamic branding: logo, background image, favicon from CDN
|
|
- Layout presets (single layout for V1)
|
|
|
|
##### 8. [`api-route-patterns.instructions.md`](.github/instructions/api-route-patterns.instructions.md)
|
|
|
|
**Content:**
|
|
- SvelteKit `+server.ts` conventions
|
|
- API route structure: `src/routes/api/`
|
|
- Asset upload endpoint: multipart form, file validation, sharp conversion
|
|
- Event CRUD: list, create, update, delete with site scoping
|
|
- Form action alternatives (prefer form actions over API for admin)
|
|
- Authentication checks in API routes
|
|
- Response format conventions
|
|
|
|
##### 9. [`testing-multi-tenant.instructions.md`](.github/instructions/testing-multi-tenant.instructions.md)
|
|
|
|
**Content:**
|
|
- Testing with multi-tenant context: mocking `locals`
|
|
- Mocking the database: Drizzle mock patterns with `vi.hoisted`
|
|
- Testing auth guards: mock `locals.user`, `locals.membership`
|
|
- Testing site resolution: mock `getSiteBySlug` return values
|
|
- Testing admin form actions: `POST` to route, check redirects
|
|
- Testing API routes: mock file upload, verify CDN interaction
|
|
- Coverage targets for multi-tenant code paths
|
|
|
|
---
|
|
|
|
## 4. .github/prompts/ — Prompt Templates
|
|
|
|
### 4A. Tech Prompts to KEEP (with updates)
|
|
|
|
#### [`generate-api-test.prompt.md`](.github/prompts/generate-api-test.prompt.md) — Moderate Update
|
|
- **Description**: Already mentions "SvelteKit API handler"
|
|
- **Change**: Replace "The Web Cooperative project" → "The Collective Hub project"
|
|
- **Mocking patterns**: Update from generic to Collective Hub patterns (mock `$lib/server/db`, `$lib/server/cdn`, `$lib/server/auth`)
|
|
- **Add**: Multi-tenant test patterns (mock `locals.site`, test site-scoped queries)
|
|
- **Changes**: ~10-15 lines
|
|
|
|
#### [`generate-component-test.prompt.md`](.github/prompts/generate-component-test.prompt.md) — Minor Update
|
|
- **Description**: Replace "The Web Cooperative" → "The Collective Hub"
|
|
- **Content**: Likely already generic — verify and update project name references
|
|
- **Changes**: ~2-3 lines
|
|
|
|
#### [`new-route.prompt.md`](.github/prompts/new-route.prompt.md) — Moderate Update
|
|
- **Description**: Replace "The Web Cooperative website" → "The Collective Hub platform"
|
|
- **Auth guard pattern**: Update to use Collective Hub's `locals.site` and `locals.membership`
|
|
- **Load function template**: Add site-scoped query pattern
|
|
- **Add**: Note about admin routes vs public routes
|
|
- **Changes**: ~15 lines
|
|
|
|
#### [`test-coverage.prompt.md`](.github/prompts/test-coverage.prompt.md) — Moderate Update
|
|
- **Description**: Replace "The Web Cooperative" → "The Collective Hub"
|
|
- **Coverage targets**: Adjust for multi-tenant code paths
|
|
- **Focus areas**: Admin routes, API routes, site resolver, auth logic, DB queries
|
|
- **Changes**: ~10 lines
|
|
|
|
### 4B. Marketing Prompts to REPLACE (5 files → 5 new dev prompts)
|
|
|
|
| # | Old File | New File | Purpose |
|
|
|---|----------|----------|---------|
|
|
| 1 | `competitor-analysis.prompt.md` | `generate-admin-page.prompt.md` | Scaffold new admin page with auth guard, form, and save pattern |
|
|
| 2 | `generate-ad-copy.prompt.md` | `generate-db-migration.prompt.md` | Scaffold Drizzle migration for schema changes |
|
|
| 3 | `generate-seo-content.prompt.md` | `generate-api-endpoint.prompt.md` | Scaffold API route with auth, validation, site scoping |
|
|
| 4 | `generate-website-copy.prompt.md` | `generate-svelte-component.prompt.md` | Scaffold Svelte component with runes, Tailwind, snippets |
|
|
| 5 | `social-media-content.prompt.md` | `generate-seed-data.prompt.md` | Scaffold seed script for local dev and new site setup |
|
|
|
|
#### New Prompt Details
|
|
|
|
##### 1. [`generate-admin-page.prompt.md`](.github/prompts/generate-admin-page.prompt.md)
|
|
|
|
**Content:**
|
|
```markdown
|
|
Scaffold a new admin page for The Collective Hub at path `admin/{section}/`.
|
|
|
|
## What to create
|
|
|
|
### 1. `+page.server.ts`
|
|
- Auth guard: verify `locals.user` and `locals.membership` role
|
|
- Load current settings/data from DB scoped by `locals.site.id`
|
|
- Form actions: validate, save to DB, redirect with success message
|
|
|
|
### 2. `+page.svelte`
|
|
- Import types from `./$types`
|
|
- Use Svelte 5 runes: `$props()`, `$state()`, `$derived()`
|
|
- Form with Tailwind styling
|
|
- Save/cancel buttons
|
|
```
|
|
|
|
##### 2. [`generate-db-migration.prompt.md`](.github/prompts/generate-db-migration.prompt.md)
|
|
|
|
**Content:**
|
|
```markdown
|
|
Generate a Drizzle migration for The Collective Hub.
|
|
|
|
## Rules
|
|
- Additive changes only (new tables, new columns)
|
|
- Every new table must have a `siteId` foreign key
|
|
- Every new table must have UUID PK, createdAt, updatedAt
|
|
- Use `drizzle-kit generate` to create the SQL migration
|
|
- Update schema.ts first, then run generation
|
|
```
|
|
|
|
##### 3. [`generate-api-endpoint.prompt.md`](.github/prompts/generate-api-endpoint.prompt.md)
|
|
|
|
**Content:**
|
|
```markdown
|
|
Scaffold a SvelteKit API endpoint for The Collective Hub at `api/{resource}/`.
|
|
|
|
## What to create
|
|
|
|
### `+server.ts`
|
|
- Import `db` from `$lib/server/db`
|
|
- Access `locals.site` for site scoping
|
|
- All queries filter by `siteId`
|
|
- Auth check: `if (!locals.user) return json({ error: 'Unauthorized' }, { status: 401 })`
|
|
- Validate request body with Zod or manual checks
|
|
- Return `json()` responses
|
|
```
|
|
|
|
##### 4. [`generate-svelte-component.prompt.md`](.github/prompts/generate-svelte-component.prompt.md)
|
|
|
|
**Content:**
|
|
```markdown
|
|
Scaffold a Svelte 5 component for The Collective Hub.
|
|
|
|
## Conventions
|
|
- PascalCase filename
|
|
- `$lib/components/` path for shared components
|
|
- Route-level components stay in route directory
|
|
- Use `$props()` with inline type
|
|
- Use snippets over slots for composition
|
|
- Tailwind CSS for styling
|
|
- Lucide icons from `@lucide/svelte`
|
|
- No `svelte-ignore` comments
|
|
```
|
|
|
|
##### 5. [`generate-seed-data.prompt.md`](..github/prompts/generate-seed-data.prompt.md)
|
|
|
|
**Content:**
|
|
```markdown
|
|
Generate a seed script for The Collective Hub.
|
|
|
|
## What to create in `scripts/seed.mjs`
|
|
|
|
### Site Record
|
|
- Insert a site row with slug matching `SITE_SLUG` env var
|
|
- Name, isActive=true
|
|
|
|
### Site Settings
|
|
- Insert siteSettings row with default branding, theme, homepage JSON
|
|
|
|
### Default Data
|
|
- Optional default navLinks, socialLinks, sample events
|
|
- Only if the phase requires it
|
|
```
|
|
|
|
---
|
|
|
|
## 5. .github/workflows/ — CI/CD Workflows
|
|
|
|
### [`ci-web.yml`](.github/workflows/ci-web.yml) — Moderate Update
|
|
|
|
**Changes:**
|
|
1. **Title**: "CI" → "CI - The Collective Hub" (cosmetic)
|
|
2. **Env vars**: Add Collective Hub-specific stubs for build:
|
|
- `SITE_SLUG=ci-test` (needed for build)
|
|
- `OWNER_DISCORD_ID=000000000000000000` (stub)
|
|
- `CDN_BASE_URL=http://cdn.example.com` (stub)
|
|
3. **Trigger paths**: Already correct (src/, package.json, etc.)
|
|
4. **Steps**: Add Docker build test stage:
|
|
```yaml
|
|
- name: Build Docker image
|
|
run: docker build -t collective-hub-ci .
|
|
```
|
|
5. **Coverage**: Already using vitest, keep as-is
|
|
6. **Markdown validation**: Keep but update config to exclude old marketing files
|
|
|
|
### [`release.yml`](.github/workflows/release.yml) — Minor Update
|
|
|
|
**Changes:**
|
|
1. **Line 63**: Change `## The Web Cooperative — ${{ steps.resolve.outputs.tag }}` → `## The Collective Hub — ${{ steps.resolve.outputs.tag }}`
|
|
2. **Tag prefix**: Optionally change `content/*` to `release/*` for conventional release tags (or keep `release/*` — discuss with David)
|
|
|
|
---
|
|
|
|
## 6. Summary: Files to Create vs Keep vs Delete
|
|
|
|
### Files to CREATE (new content, no existing version useful)
|
|
|
|
| # | File Path |
|
|
|---|-----------|
|
|
| 1 | `.github/instructions/multi-tenant-architecture.instructions.md` |
|
|
| 2 | `.github/instructions/database-schema.instructions.md` |
|
|
| 3 | `.github/instructions/auth-and-roles.instructions.md` |
|
|
| 4 | `.github/instructions/deployment-guide.instructions.md` |
|
|
| 5 | `.github/instructions/admin-panel.instructions.md` |
|
|
| 6 | `.github/instructions/cdn-and-assets.instructions.md` |
|
|
| 7 | `.github/instructions/public-site-theming.instructions.md` |
|
|
| 8 | `.github/instructions/api-route-patterns.instructions.md` |
|
|
| 9 | `.github/instructions/testing-multi-tenant.instructions.md` |
|
|
| 10 | `.github/prompts/generate-admin-page.prompt.md` |
|
|
| 11 | `.github/prompts/generate-db-migration.prompt.md` |
|
|
| 12 | `.github/prompts/generate-api-endpoint.prompt.md` |
|
|
| 13 | `.github/prompts/generate-svelte-component.prompt.md` |
|
|
| 14 | `.github/prompts/generate-seed-data.prompt.md` |
|
|
|
|
### Files to REWRITE (existing file, >70% new content)
|
|
|
|
| # | File Path | New Content % |
|
|
|---|-----------|---------------|
|
|
| 1 | `AGENTS.md` | ~90% |
|
|
| 2 | `.github/copilot-instructions.md` | ~95% |
|
|
| 3 | `.github/instructions/docs-workflow.instructions.md` | ~95% |
|
|
| 4 | `.github/instructions/server-ts.instructions.md` | ~50% (keep env var rules, replace EspoCRM sections) |
|
|
|
|
### Files to UPDATE (existing file, <30% new content)
|
|
|
|
| # | File Path | Changes |
|
|
|---|-----------|---------|
|
|
| 1 | `.github/instructions/bits-ui.instructions.md` | Update description line only |
|
|
| 2 | `.github/instructions/components.instructions.md` | Update description, add admin component note |
|
|
| 3 | `.github/instructions/icons.instructions.md` | Update description line |
|
|
| 4 | `.github/instructions/svelte5.instructions.md` | Update description line |
|
|
| 5 | `.github/instructions/tailwindcss.instructions.md` | Update description, path references |
|
|
| 6 | `.github/instructions/testing.instructions.md` | Add multi-tenant testing section |
|
|
| 7 | `.github/prompts/generate-api-test.prompt.md` | Update project name, mock patterns |
|
|
| 8 | `.github/prompts/generate-component-test.prompt.md` | Update project name |
|
|
| 9 | `.github/prompts/new-route.prompt.md` | Update auth guard, add site-scoped patterns |
|
|
| 10 | `.github/prompts/test-coverage.prompt.md` | Update project name, coverage targets |
|
|
| 11 | `.github/workflows/ci-web.yml` | Add build env stubs, Docker build test |
|
|
| 12 | `.github/workflows/release.yml` | Update release title |
|
|
|
|
### Files to DELETE (no longer relevant)
|
|
|
|
None — the old marketing files (`brand-voice.instructions.md`, `seo.instructions.md`, etc.) are being replaced by new files with different names. The old files must be **removed** to avoid confusion. This is a delete-then-create operation for 9 instructions + 5 prompts = 14 files to delete.
|
|
|
|
### Files to KEEP AS-IS
|
|
|
|
| # | File Path | Reason |
|
|
|---|-----------|--------|
|
|
| 1 | `.github/instructions/svelte-ts.instructions.md` | Already generic, no project references |
|
|
|
|
---
|
|
|
|
## 7. Execution Order
|
|
|
|
The work should be done in this order, grouped by dependency:
|
|
|
|
### Phase A: Foundation (parallel-safe)
|
|
1. Delete 9 old marketing instruction files
|
|
2. Delete 5 old marketing prompt files
|
|
3. Create 9 new instruction files (all independent, can be done in parallel)
|
|
4. Create 5 new prompt files (all independent, can be done in parallel)
|
|
|
|
### Phase B: Updates (depends on Phase A for context)
|
|
5. Update `server-ts.instructions.md` — needs to know new instruction file names for cross-references
|
|
6. Update `testing.instructions.md` — add multi-tenant patterns
|
|
7. Update 4 tech prompts (api-test, component-test, new-route, test-coverage)
|
|
8. Update `docs-workflow.instructions.md`
|
|
|
|
### Phase C: Master files (depends on Phase B for file references)
|
|
9. Rewrite `AGENTS.md` — references all instruction and prompt files
|
|
10. Rewrite `.github/copilot-instructions.md` — references all instruction files
|
|
|
|
### Phase D: CI/CD (independent)
|
|
11. Update `ci-web.yml`
|
|
12. Update `release.yml`
|
|
|
|
### Phase E: Cleanup
|
|
13. Run `svelte-check` to verify no broken imports
|
|
14. Run `vitest` to verify tests still pass
|
|
15. Verify markdown links are valid using `markdown-link-check`
|
|
|
|
---
|
|
|
|
## Appendix: File Content Comparison
|
|
|
|
### Old vs New: Brand Voice → Multi-Tenant Architecture
|
|
|
|
**Old (brand-voice.instructions.md):**
|
|
```
|
|
# Brand Voice & Tone Guidelines
|
|
## Voice Characteristics
|
|
- Direct, Honest, Practical, Plain language, Authoritative but approachable
|
|
## Tone Ladder
|
|
- Educational, Direct feedback, Supportive, Firm, Casual
|
|
```
|
|
|
|
**New (multi-tenant-architecture.instructions.md):**
|
|
```
|
|
# Multi-Tenant Architecture
|
|
## Site Resolution Flow
|
|
- env.SITE_SLUG → hooks.server.ts → site-resolver.ts → locals.site
|
|
## Data Scoping
|
|
- Every table has siteId, every query filters by it
|
|
## Deployment Model
|
|
- Git repo → multiple Coolify deployments → same Docker image
|
|
## Migration Safety
|
|
- RUN_MIGRATIONS flag, exactly one deployment runs migrations
|
|
## Environment Variables
|
|
- Shared vs per-site variable classification
|
|
```
|
|
|
|
### Old vs New: Copywriting → Database Schema
|
|
|
|
**Old (copywriting.instructions.md):**
|
|
```
|
|
# Copywriting Best Practices
|
|
- PAS formula, AIDA formula
|
|
- Feature-to-benefit mapping
|
|
- Headline templates, CTA formulas
|
|
```
|
|
|
|
**New (database-schema.instructions.md):**
|
|
```
|
|
# Database Schema
|
|
## Tables
|
|
- sites, users, memberships, siteSettings, assets, navLinks, socialLinks, events
|
|
## ER Diagram (Mermaid)
|
|
## Indexing Strategy
|
|
## Migration Patterns
|
|
## Query Examples
|
|
```
|
|
|
|
### Old vs New: SEO → Auth & Roles
|
|
|
|
**Old (seo.instructions.md):**
|
|
```
|
|
# SEO Content & Strategy Guidelines
|
|
- Keyword research
|
|
- On-page optimization
|
|
- Content structuring
|
|
```
|
|
|
|
**New (auth-and-roles.instructions.md):**
|
|
```
|
|
# Authentication & Roles
|
|
## Better Auth with Discord OAuth
|
|
## Auth Flow: Login → Callback → Session
|
|
## Owner Bootstrap (OWNER_DISCORD_ID)
|
|
## Super Admin (SUPER_ADMIN_DISCORD_IDS)
|
|
## Role Hierarchy: owner > admin > editor
|
|
## Auth Guard Patterns
|
|
```
|
|
|
|
---
|
|
|
|
> **End of Plan**
|
|
>
|
|
> This plan covers 35 files total: 14 new, 4 rewritten, 12 updated, 1 kept as-is, and 14 deleted.
|