Files
fosterflow/docs/TEMPLATE_EXTRACTION.md
justinandClaude Opus 4.6 7fd2438c36 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>
2026-03-26 10:36:38 -05:00

4.8 KiB

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