AlpacApps is an open-source AI-powered platform. Set up a super low cost do-it-all system from scratch — messaging, marketing, management, and finance. You just need to set up the required (mostly free) accounts, then tell Claude Code what you have, where it is, and what you ideally want. Then watch the AI magic transpire.
$20 – $200 / monthWhat are you building?
Both profiles use the same template repo. The setup wizard tailors the project for you.
A full-stack business platform. The layers build on each other — pick what you need.
Key principle: No backend server. All application logic runs client-side in the browser. Supabase provides the database, authentication, and serverless functions. For file storage, you can use Supabase Storage (1 GB free) or Cloudflare R2 (10 GB free, zero egress fees). GitHub Pages serves static files for free.
CSS: Tailwind CSS v4 is available alongside existing CSS custom properties. The Tailwind source (styles/tailwind.css) defines AAP design tokens (colors, fonts, shadows, radii) and is compiled to styles/tailwind.out.css by GitHub Actions CI on every push. Use npm run css:build locally or npm run css:watch for development. All pages load both site.css (custom properties) and tailwind.out.css (utility classes).
Core services are pre-selected. Toggle optional ones on or off.
This mainly affects your Claude Code plan and usage-based services.
First, get a GitHub account and create your project from the starter template. Everything here is done in your browser — no terminal needed.
You'll need a free GitHub account to host your site and store your code. If you already have one, skip to the next step.
Choose a name for your project. This will become your repository name on GitHub (lowercase with hyphens, no spaces, e.g., my-salon-app).
my-salon-app)https://<username>.github.io/<project-name>/You need a copy of your project on your computer. This takes two steps:
a) Open a terminal
Cmd + Space, type Terminal, press EnterWin + R, type cmd, press Enterb) Paste this command into your terminal
Click Copy below, then paste into your terminal (Ctrl+V on Windows, Cmd+V on Mac) and press Enter:
git clone https://github.com/USERNAME/my-salon-app.git
cd my-salon-app
This downloads your project files into a folder on your computer. You'll point Claude Code at this folder in the next step.
Before Claude Code can push code to your repository, Git needs to know your GitHub credentials. The easiest way is GitHub CLI, which handles this through your browser — no passwords or tokens to manage.
a) Install all prerequisites (Mac — one command)
bash <(curl -fsSL https://alpacaplayhouse.com/scripts/install-prereqs.sh)xcode-select --install
winget install --id GitHub.clib) Log in to GitHub through your browser
Paste this into your terminal and press Enter:
gh auth login
It will ask a few questions — pick these answers:
GitHub.comHTTPSYesLogin with a web browserIt will show a one-time code and open your browser. Paste the code, click Authorize, and you’re done.
gh auth status in your terminal. You should see your GitHub username and “Logged in to github.com.”
Project structure included in the template:
your-repo/
├── index.html # Landing page
├── styles.css # Global styles
├── shared/ # Shared JavaScript modules
│ ├── supabase.js # Supabase client singleton
│ ├── auth.js # Authentication
│ └── ... # Other services
├── spaces/ # Public-facing pages
│ ├── index.html
│ ├── app.js
│ └── admin/ # Admin dashboard
│ ├── index.html
│ ├── app.js
│ └── manage.html
└── supabase/ # Edge functions (deployed via CLI)
└── functions/
Claude Code is the AI developer that powers everything. You need it installed before setting up Conductor (Step 4), which is where you’ll do all your actual work.
npm install -g @anthropic-ai/claude-code. Same features, same skills.
That’s it for now — you’ll use Claude Code through Conductor (Step 4), which gives you a much better workflow with parallel agents and workspace management.
Database, storage, auth, and serverless edge functions — all in one.
These are the only two things Claude can’t get on its own. Enter them here and hit Copy — Claude Code will log into Supabase, link your project, and fetch everything else (API keys, URLs, connection strings) automatically.
Look at your browser’s address bar: supabase.com/dashboard/project/abcdefghijk/... — the highlighted part is the ref. Or go to Project Settings → General.
The password you chose when creating the project. If you forgot it, reset it in Database settings.
This auto-fills as you type above. Click Copy, paste into Claude Code, and it handles the rest.
Set up Supabase for my project.
My project ref is: ___
My database password is: ___
Log into the Supabase CLI (supabase login), link my project (supabase link --project-ref), then fetch the project URL and anon key from the API settings automatically. Install the CLI if it's not already installed. Create the core database tables for [describe your app here], enable RLS on all tables, create storage buckets for photos and documents, commit, and push.
Don't ask me for permission at each step — just do the work end to end and show me the results when you're done.
docs/CREDENTIALS.md, create your database tables, and push the code. You don’t need to copy anything else from Supabase.
Conductor is where you’ll do all your work. It’s a Mac app that runs multiple Claude Code agents in parallel — each in its own workspace with its own branch. Instead of working in a single Claude Code session, you manage everything from Conductor.
/setup-alpacapps-infra
The wizard configures your project based on the profile you picked above.
It prunes unused modules, configures .claudeignore, creates your database tables, and pushes everything. If you picked Personal / Business, only the services you selected will be set up.
/setup-alpacapps-infra skill requires the Max plan ($100/month) or higher. If you're on the Pro plan, type this instead:
Read .claude/skills/setup-alpacapps-infra/SKILL.md and follow those instructions to set up my project
This does the exact same thing — Claude reads the setup guide and walks you through it step by step.
After the setup wizard finishes, this is how you build with Conductor:
The sections below explain each service in detail. For each one, you:
You never need to edit files yourself. Just tell Claude what you want.
If your app needs user login (admin dashboard, customer accounts, etc.), the easiest option is “Sign in with Google.” Supabase has built-in support — you just need to create a Google Cloud project and get OAuth credentials.
This is the screen users see when they click “Sign in with Google.”
https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback
### Authentication (Google OAuth via Supabase)
- Google Client ID: `your-client-id.apps.googleusercontent.com`
- Auth is handled by Supabase Auth (no edge function needed)
- Redirect URI: `https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback`
- Sign-in method: supabase.auth.signInWithOAuth({ provider: 'google' })
shared/auth.js, add login/logout UI, set up auth guards on admin pages, commit, and push.
Optional. Useful for fuzzy matching (e.g., matching bank transaction sender names to tenants).
### AI Matching (Google Gemini)
- API key: `your-gemini-key` (store as Supabase secret: GEMINI_API_KEY)
supabase secrets set GEMINI_API_KEY=your_key_here
onboarding@resend.dev.### Email (Resend)
- API key: `re_your_key_here` (store as Supabase secret: RESEND_API_KEY)
- From address: notifications@yourdomain.com (or onboarding@resend.dev)
supabase secrets set, create the edge function, deploy it, commit, and push.
+12125551234)https://YOUR_PROJECT_REF.supabase.co/functions/v1/telnyx-webhook
### SMS (Telnyx)
- API key: `KEY_your_key_here`
- Messaging Profile ID: `your-profile-id`
- Phone number: `+12125551234`
- Config stored in `telnyx_config` table
- Edge functions: `send-sms` (outbound), `telnyx-webhook` (inbound)
- Deploy webhook with `--no-verify-jwt`
- Auth: Bearer token (NOT Basic auth like Twilio)
- API: https://api.telnyx.com/v2/messages
shared/sms-service.js, commit, and push.
sq0idp-)### Payments (Square)
- Application ID: `sq0idp-your-app-id`
- Sandbox Access Token: `your-sandbox-token`
- Location ID: `your-location-id`
- Environment: sandbox (switch to production when ready)
- Config stored in `square_config` table
- Edge function: `process-square-payment`
- Sandbox SDK: https://sandbox.web.squarecdn.com/v1/square.js
- Production SDK: https://web.squarecdn.com/v1/square.js
Stripe handles ACH bank transfers (0.8% capped at $5), card payments (2.9% + 30¢), and outbound payouts to associates via Stripe Connect ($0.25/payout).
pk_test_ or pk_live_)sk_test_ or sk_live_)https://YOUR_PROJECT_REF.supabase.co/functions/v1/stripe-webhook
payment_intent.succeeded, payment_intent.payment_failed, transfer.paid, transfer.failed, account.updatedwhsec_)### Payments (Stripe)
- Publishable key (test): `pk_test_...`
- Secret key (test): `sk_test_...`
- Publishable key (live): `pk_live_...`
- Secret key (live): `sk_live_...`
- Webhook signing secret: `whsec_...`
- Config stored in `stripe_config` table
- Edge functions: `process-stripe-payment`, `stripe-webhook`
- Deploy webhook with `--no-verify-jwt`
- Stripe.js v3: https://js.stripe.com/v3/
https://YOUR_PROJECT_REF.supabase.co/functions/v1/signwell-webhook
document_completed event### E-Signatures (SignWell)
- API key: `your-signwell-api-key`
- API base: https://www.signwell.com/api/v1
- Auth: X-Api-Key header
- Config stored in `signwell_config` table
- Deploy webhook with `--no-verify-jwt`
S3-compatible object storage with 10 GB free and zero egress fees. The setup wizard creates two R2 buckets automatically using your Cloudflare Global API Key:
<project>-media — Images, documents, uploads<project>-backups — Database exports, config snapshotsIf you prefer manual setup:
<project>-media and <project>-backupspub-*.r2.dev URL)### Cloudflare R2
- Account ID: `your-cloudflare-account-id` (from the R2 dashboard URL or Overview page)
- Bucket name: `your-bucket-name`
- Public URL: `https://pub-xxxx.r2.dev` (from bucket Settings → Public Development URL)
- Access Key ID: `your-access-key`
- Secret Access Key: `your-secret-key`
supabase secrets set R2_ACCOUNT_ID=... R2_ACCESS_KEY_ID=... R2_SECRET_ACCESS_KEY=... R2_BUCKET_NAME=... R2_PUBLIC_URL=...,
create r2_config table, create supabase/functions/_shared/r2-upload.ts (S3-compatible upload with AWS Sig V4)
The setup wizard creates two D1 databases automatically using your Cloudflare Global API Key:
<project>-sessions — Claude session transcripts with search/filtering (browsable in DevControl Sessions tab)<project>-devcontrol — Task tracking, build logs, deployment historyBoth use free tier (5M reads/day, 100K writes/day, 5 GB storage). If you prefer manual setup:
npm install -g wranglerwrangler loginnpx wrangler d1 create <project>-sessions
npx wrangler d1 create <project>-devcontrol
Copy both database_id values from the output.
cloudflare/claude-sessions/wrangler.jsonc — replace YOUR_DATABASE_ID_HERE with your database IDcd cloudflare/claude-sessions
npx wrangler d1 execute claude-sessions --file=schema.sql --remote
src/index.js — set AUTH_TOKENnpx wrangler deploy
Note the Worker URL from the output.
### Cloudflare D1 Session Archive
- Worker URL: `https://claude-sessions.YOUR-SUBDOMAIN.workers.dev`
- Auth token: `your-chosen-token`
save-session.sh to ~/.claude/hooks/, set the API URL and token, and add a SessionEnd hook entry to ~/.claude/settings.json. Every session that ends will auto-archive its transcript.
Optional. Open-source CLI that supercharges Claude Code with powerful skills: headless browser for QA testing (~100ms per command), code review, ship workflow, engineering retrospectives, and more. By Garry Tan, MIT licensed.
curl -fsSL https://raw.githubusercontent.com/garrytan/gstack/main/install.sh | bash
ls ~/.claude/skills/gstack/SKILL.md
If the file exists, you’re set. Claude Code auto-detects the skills.
Updating: Run /gstack-upgrade inside Claude Code, or re-run the install script.
Source: github.com/garrytan/gstack
Some features need always-on processes that can’t run in the browser or in Supabase Edge Functions. These run on a cloud VM (recommended: Hostinger VPS $5–12/mo, or any provider).
| Tier | Spec | Cost | Good for |
|---|---|---|---|
| Basic | 2 vCPU, 2 GB RAM | ~$12/mo | A few lightweight pollers + image gen |
| Full | 2 vCPU, 4 GB RAM | ~$24–32/mo | All workers including Claude Code automation (bug fixer, feature builder) |
“Set up the background workers on my server at [IP]. Create systemd services for the bug fixer, device pollers, and image gen worker. Add SSH access details to CLAUDE.local.md.”
https://<username>.github.io/<project-name>/ and that works great while you’re building. Come back to this when you’re ready to share your app with the world under your own brand name.
If you don’t already own one, buy a domain from any registrar. Here are popular options:
.commyapp.com) and click SaveThis is the key step: you need to tell your domain registrar to send traffic to GitHub’s servers. The exact screens look a little different at each registrar, but you’re doing the same thing everywhere.
Find your DNS settings:
Add these records:
| Type | Name / Host | Value / Points to |
|---|---|---|
A | @ | 185.199.108.153 |
A | @ | 185.199.109.153 |
A | @ | 185.199.110.153 |
A | @ | 185.199.111.153 |
CNAME | www | <username>.github.io |
myapp.com, go to GitHub’s servers.”www.myapp.com work too, by pointing it to your GitHub Pages address.@ symbol means “the root domain” (i.e., myapp.com with nothing in front of it).If your registrar already has default records (like parking page records), delete those first, then add the ones above.
Visit your domain in a browser. If you see your site, you’re done. If not:
Claude Code reads CLAUDE.md at the start of every conversation. To keep this fast and efficient, we use an on-demand context loading pattern: CLAUDE.md stays slim (~30 lines) and indexes separate docs/*.md files that Claude only loads when the task requires them.
A monolithic CLAUDE.md with credentials, schema, patterns, and integrations can easily reach 200+ lines — thousands of tokens loaded into every conversation whether needed or not. With on-demand loading, a conversation about Tailwind styling only loads docs/PATTERNS.md, while a database migration only loads docs/SCHEMA.md and docs/CREDENTIALS.md.
| File | Purpose | Git status |
|---|---|---|
CLAUDE.md | Slim directives + on-demand doc index (~30 lines) | Checked in |
CLAUDE.local.md | Operator directives, live URLs, push workflow | Gitignored |
docs/CREDENTIALS.md | All API keys, tokens, connection strings | Gitignored |
docs/SCHEMA.md | Database table definitions | Checked in |
docs/PATTERNS.md | Code patterns, Tailwind tokens, auth system | Checked in |
docs/KEY-FILES.md | Project file structure reference | Checked in |
docs/DEPLOY.md | Deployment workflow, version format | Checked in |
docs/INTEGRATIONS.md | External services, cost tiers | Checked in |
docs/CHANGELOG.md | Recent changes log | Checked in |
The top of CLAUDE.md contains trigger hints that tell Claude which doc to load for which task:
> **On-demand docs — load when the task matches:**
> - `docs/CREDENTIALS.md` — **load for:** SQL queries, deploying functions, SSH, API calls
> - `docs/SCHEMA.md` — **load for:** writing queries, modifying tables, debugging data
> - `docs/PATTERNS.md` — **load for:** writing UI code, Tailwind styling, code review
> - `docs/KEY-FILES.md` — **load for:** finding files, understanding project structure
> - `docs/DEPLOY.md` — **load for:** pushing, deploying, version questions
> - `docs/INTEGRATIONS.md` — **load for:** external APIs, vendor setup, pricing
> - `docs/CHANGELOG.md` — **load for:** understanding recent changes
CLAUDE.local.md and docs/CREDENTIALS.md are already in .gitignore.
The wizard generates different context files based on your profile:
.claudeignore file excludes property-management code from Claude’s search scope, saving thousands of tokens per conversation.See docs/CLAUDE-TEMPLATE.md for the exact templates and feature-manifest.json for the file-to-feature mapping that drives pruning.
Core Stack — Free:
User Login — Free (Google OAuth):
Email — Free (Resend):
onboarding@resend.dev)SMS — Pay-as-you-go (Telnyx):
Payments — Free until you process (Square):
Payments — Free until you process (Stripe):
E-Signatures — Free tier (SignWell):
Optional:
Once you've given Claude your credentials, tell it to set everything up. You can either use the setup skill or paste this prompt:
Or just type /setup-alpacapps-infra in Claude Code — the skill walks through the same setup interactively, asking what services you need as it goes.
Claude handles everything from there — creating tables, writing edge functions, deploying, setting secrets, committing, and pushing. You never need to touch the terminal yourself.
Fully native mobile apps for iOS and Android. Each platform uses its native UI toolkit for the best possible experience — SwiftUI on iOS, Jetpack Compose on Android.
Both apps connect to the same Supabase backend and Home Assistant APIs as the web app. Each is built with platform-native tools for smooth performance and idiomatic UI.
| Layer | iOS | Android |
|---|---|---|
| Language | Swift | Kotlin |
| UI Framework | SwiftUI | Jetpack Compose (Material 3) |
| Auth | Supabase Auth (AuthService.swift) | Supabase Auth (AuthManager.kt) |
| API Layer | HaosService, LightService, SonosService | HaosApi, LightApi, SonosApi |
| Theme | AppTheme.swift (brand tokens) | Theme.kt (Material 3 brand tokens) |
| Screen | Purpose |
|---|---|
| Login | Email/password + Google OAuth |
| Lights | Control all smart lights (on/off, color, brightness) via HAOS |
| Music | Sonos room control (play, pause, volume, search) |
| Climate | Nest thermostat control |
| Cameras | Live camera streams via go2rtc |
| Cars | Tesla vehicle status and controls |
| Assistant | Chat with PAI (AI assistant) |
| Subtitles | Real-time live subtitles |
| Work | Associate work tracking and hours |
| Platform | IDE | Requirements |
|---|---|---|
| iOS | Xcode 15+ | macOS only, free from App Store. Apple Developer account ($99/year) for App Store distribution |
| Android | Android Studio | macOS, Windows, or Linux. Google Play Console ($25 one-time) for Play Store distribution |
Claude Code handles the build process. Each platform builds independently:
mobile-ios/AlpacaPlayhouse.xcodeproj in Xcode, press Play to build and run on simulator or devicemobile-android/ in Android Studio, press Run to build the APK and deployalpaca-kiosk/ project provides a lockdown kiosk mode with device admin, boot receiver, photo booth, and HTTP API serveralpaca-kiosk/) with device admin lockdown, guest book photo booth, and HTTP API for remote controloldmackiosk/) for legacy Mac kiosk displays with screen lockdown, audio management, and JS bridge67 edge functions, 11 workers, 2 native mobile apps — zero backend code
Other ways to get started: