Initial paw❤️print repo with SaaS architecture docs
README, multi-tenant SaaS architecture (database-per-tenant), automated onboarding flow (signup → 60 seconds → live site), and template extraction plan from AHCR codebase. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
# Template Extraction Plan
|
||||
|
||||
## What to Pull from AHCR
|
||||
|
||||
The AHCR codebase (`almosthomecaninerescue.com-2026/ahcr`) is the source. We extract and genericize.
|
||||
|
||||
### Copy As-Is (Core Framework)
|
||||
- SvelteKit config, vite config, tsconfig
|
||||
- Drizzle ORM setup and schema (strip AHCR-specific data)
|
||||
- Auth system (sessions, Argon2, roles)
|
||||
- Rate limiting
|
||||
- Audit logging
|
||||
- File upload handler
|
||||
- Email system (Nodemailer)
|
||||
- Stripe integration
|
||||
- Bot protection (tracking, robots.txt, honeypot)
|
||||
|
||||
### Genericize (Replace AHCR-Specific)
|
||||
|
||||
| AHCR-Specific | PawPrint Generic |
|
||||
|---|---|
|
||||
| "Almost Home Canine Rescue" | `ORG_NAME` env var |
|
||||
| Sioux Falls, SD references | `ORG_LOCATION` env var |
|
||||
| SD17 Petfinder org ID | `PETFINDER_ORG_ID` env var (optional) |
|
||||
| Teal color scheme (#0d9488) | Configurable via setup wizard, stored in site_settings |
|
||||
| AHCR logo / images | Placeholder logo, upload your own |
|
||||
| 16 adoption agreement items | Configurable JSON in site_settings |
|
||||
| Foster application agreements | Configurable JSON |
|
||||
| info@almosthomecaninerescue.com | `SMTP_FROM` env var |
|
||||
| GiveButter donation link | Generic donate page with configurable URL |
|
||||
| Facebook app ID / secrets | Per-tenant config |
|
||||
| Specific intake sources | Seed with common defaults, editable in admin |
|
||||
| Content blocks (home, about, etc.) | Seed with placeholder content |
|
||||
|
||||
### Remove (AHCR Data)
|
||||
- database_dump.sql
|
||||
- decoded_lewodi.php (malware artifact)
|
||||
- CSV import data and scripts (AHCR-specific)
|
||||
- Petfinder scraper (API is dead)
|
||||
- docs/csv-import-data-issues.md
|
||||
- docs/deleted-junk-pets.md
|
||||
- All pet data, user data, etc.
|
||||
|
||||
### Add (New for Template)
|
||||
- Setup wizard (first-login onboarding)
|
||||
- `org_config` table or expand site_settings for org-level config
|
||||
- Configurable color theme (CSS custom properties)
|
||||
- Configurable application form questions
|
||||
- Seed script with placeholder data (example pets, example events)
|
||||
- Docker Compose file
|
||||
- Landing page / marketing site (separate from rescue site)
|
||||
- Health check endpoint (`/api/health`)
|
||||
- Tenant provisioning scripts
|
||||
|
||||
## File-by-File Extraction Checklist
|
||||
|
||||
### Config Files
|
||||
- [ ] package.json — update name, description, remove AHCR references
|
||||
- [ ] svelte.config.js — keep as-is
|
||||
- [ ] vite.config.ts — keep as-is
|
||||
- [ ] tsconfig.json — keep as-is
|
||||
- [ ] drizzle.config.ts — keep as-is
|
||||
- [ ] .env.example — genericize all values
|
||||
- [ ] .gitignore — keep, add uploads/
|
||||
|
||||
### Schema
|
||||
- [ ] src/lib/server/schema.ts — keep all tables, add org_config if needed
|
||||
- [ ] drizzle/ migrations — regenerate clean from schema
|
||||
|
||||
### Auth & Roles
|
||||
- [ ] src/lib/roles.ts — keep all roles
|
||||
- [ ] src/lib/server/auth.ts — keep as-is
|
||||
- [ ] src/lib/server/auth-utils.ts — keep as-is
|
||||
- [ ] src/hooks.server.ts — keep, genericize any hardcoded strings
|
||||
|
||||
### Server Utilities
|
||||
- [ ] src/lib/server/db.ts — keep as-is
|
||||
- [ ] src/lib/server/email.ts — genericize from address, org name in templates
|
||||
- [ ] src/lib/server/stripe.ts — keep as-is
|
||||
- [ ] src/lib/server/upload.ts — keep as-is
|
||||
- [ ] src/lib/server/audit.ts — keep as-is
|
||||
- [ ] src/lib/server/track.ts — keep as-is
|
||||
- [ ] src/lib/server/rate-limit.ts — keep as-is
|
||||
- [ ] src/lib/server/content.ts — keep as-is
|
||||
- [ ] src/lib/server/facebook.ts — keep as-is
|
||||
- [ ] src/lib/server/contract.ts — genericize org name in contract template
|
||||
- [ ] src/lib/server/slugify.ts — keep as-is
|
||||
|
||||
### Routes — Keep & Genericize
|
||||
- [ ] All admin routes — keep, genericize any AHCR text
|
||||
- [ ] All public routes — keep, replace hardcoded content with CMS blocks
|
||||
- [ ] Foster portal — keep as-is
|
||||
- [ ] API routes — keep as-is
|
||||
- [ ] robots.txt — keep dynamic version
|
||||
- [ ] sitemap.xml — keep, genericize
|
||||
|
||||
### Routes — Remove
|
||||
- [ ] src/lib/server/csv-import.ts — AHCR-specific
|
||||
- [ ] src/lib/server/run-import.ts — AHCR-specific
|
||||
- [ ] src/routes/admin/import/ — replace with generic CSV import
|
||||
|
||||
### Components
|
||||
- [ ] All UI components — keep as-is
|
||||
- [ ] Header/Footer — genericize org name, links
|
||||
- [ ] Replace any hardcoded "Almost Home" text
|
||||
|
||||
### Static Assets
|
||||
- [ ] Remove AHCR logos and images
|
||||
- [ ] Add placeholder logo
|
||||
- [ ] Keep favicon structure (replace with paw icon)
|
||||
|
||||
### New Files to Create
|
||||
- [ ] scripts/provision-tenant.sh
|
||||
- [ ] scripts/deprovision-tenant.sh
|
||||
- [ ] scripts/seed-tenant.js
|
||||
- [ ] scripts/send-welcome.js
|
||||
- [ ] scripts/migrate-all.sh
|
||||
- [ ] docker-compose.yml
|
||||
- [ ] Dockerfile
|
||||
- [ ] Setup wizard route (/setup)
|
||||
- [ ] Health check endpoint (/api/health)
|
||||
- [ ] Landing/marketing page (separate or at /)
|
||||
|
||||
## Estimated Effort
|
||||
|
||||
| Task | Time |
|
||||
|------|------|
|
||||
| Extract and genericize core app | 4-6 hours |
|
||||
| Setup wizard | 2-3 hours |
|
||||
| Docker Compose | 1 hour |
|
||||
| Provisioning scripts | 2-3 hours |
|
||||
| Admin meta-dashboard | 4-6 hours |
|
||||
| Landing page | 2-3 hours |
|
||||
| Stripe billing integration | 2-3 hours |
|
||||
| Testing & polish | 3-4 hours |
|
||||
| **Total** | **~20-30 hours** |
|
||||
Reference in New Issue
Block a user