Do all of this manually before giving the agent its first prompt.
Go to: https://supabase.com/dashboard → New Project
| Setting | Value |
|---|---|
| Project name | pasal-id |
| Database password | Generate a strong one, save it |
| Region | Southeast Asia (Singapore) ← closest to Indonesia |
| Plan | Free tier is fine for hackathon |
After creation, grab these from Settings → API:
| Key | Where to find | What it looks like |
|---|---|---|
SUPABASE_URL |
Project URL | https://abcdefgh.supabase.co |
SUPABASE_ANON_KEY |
anon public key |
eyJhbGciOiJIUzI1NiIs... (long JWT) |
SUPABASE_SERVICE_ROLE_KEY |
service_role secret key |
eyJhbGciOiJIUzI1NiIs... (different long JWT) |
⚠️ ANON key = safe for frontend (respects RLS policies)⚠️ SERVICE_ROLE key = bypasses RLS, use ONLY in backend/scripts/MCP server. Never expose to browser.
Also do this now in Supabase SQL Editor:
CREATE EXTENSION IF NOT EXISTS ltree;You already have this from the hackathon.
| Key | What it looks like |
|---|---|
ANTHROPIC_API_KEY |
sk-ant-... |
Used in: the optional chat feature (Task 4.5) and for testing MCP connector via API.
Go to: https://vercel.com → Sign up / connect GitHub
No API key needed upfront. You'll connect the GitHub repo later (Task 4.6). Just make sure your account is ready.
For custom domain pasal.id:
- In Vercel project settings → Domains → Add
pasal.id - Update your domain's DNS:
Arecord →76.76.21.21CNAMEforwww→cname.vercel-dns.com
Go to: https://railway.app → Sign up with GitHub
| Key | What it looks like |
|---|---|
RAILWAY_TOKEN (optional) |
Only if using CLI: railway login |
Free tier gives $5/month credit — more than enough for the hackathon. You'll deploy the MCP server here in Task 3.3.
Make sure these are installed:
# Check Node.js (need 18+)
node --version
# Check Python (need 3.11+)
python3 --version
# Check Docker
docker --version
# Check Git
git --versionIf missing anything:
# macOS
brew install node python@3.12 docker git
# Ubuntu/Debian
sudo apt install nodejs python3.12 docker.io gitCreate a single .env file in your project root with all keys. The agent will distribute them to sub-projects.
# Supabase
SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...YOUR_ANON_JWT_KEY
SUPABASE_SERVICE_ROLE_KEY=eyJ...YOUR_SERVICE_ROLE_JWT_KEY
# Anthropic (optional — only needed for chat feature)
ANTHROPIC_API_KEY=sk-ant-...YOUR_KEYThe agent will read this file and create the sub-project env files (apps/web/.env.local, apps/mcp-server/.env, scripts/.env) as part of setup.
Copy-paste the block below as your FIRST message to Claude Code.
Read CLAUDE.md first, then start working through TASKS.md from Task 0.1.
Context:
- Supabase project is already created. Extension `ltree` is enabled. All API keys are in the root `.env` file — read it and distribute keys to `apps/web/.env.local`, `apps/mcp-server/.env`, and `scripts/.env` as described in CLAUDE.md § "Environment Variables".
- Domain pasal.id is registered and DNS is pointed to Vercel.
- We're building for the "Built with Opus 4.6" Claude Code Hackathon. Deadline is Monday Feb 16 3PM EST. Ship fast.
- After finishing each task, git commit AND push with the format: "task X.Y: description". Also commit+push mid-task whenever you have something working. We need to track progress on GitHub.
- If you get stuck on any sub-problem for more than 15 minutes (especially scraping, PDF parsing, or CSS), use the simplest fallback that works and move forward. We can polish later.
Start now with Task 0.1.
Keep these handy for when you need to intervene or redirect the agent:
Stop scraping. Download 5 sample PDFs manually from peraturan.go.id and put them in data/raw/. Then use pdfplumber to extract text from those 5 files. If that also fails, create hardcoded JSON files in data/parsed/ for the top 5 laws from the priority list in ARCHITECTURE.md § "Priority Laws for MVP". We need data in the database — how we get it doesn't matter for the demo.
Stop polishing the UI. We need a functional search page and a basic law reader page — that's it. No animations, no transitions, no custom components. Use basic Tailwind utilities. The demo video is the priority, not pixel-perfect design. Move to the next task.
Stop. Go back to TASKS.md. What is the next unchecked task? Do only that task. Do not add features that aren't in TASKS.md. Commit what you have and move to the next sequential task.
Give me a status report. For each task in TASKS.md (0.1 through 5.4), tell me: ✅ done, 🔧 in progress, or ⬜ not started. Also run the phase verification checks from CLAUDE.md for any completed phases and show me the output.
We're switching to demo mode. Check TASKS.md — if Tasks 5.1 through 5.3 are not done, stop whatever you're working on and jump to Phase 5. The demo video is worth 30% of our score. A working MCP demo with 5 laws in the database is worth more than a complete website with no demo video.
For now, skip remote deployment. Run the MCP server locally and demo it via Claude Desktop with this config in claude_desktop_config.json:
{
"mcpServers": {
"pasal-id": {
"command": "python",
"args": ["apps/mcp-server/server.py"],
"env": {
"SUPABASE_URL": "https://xxx.supabase.co",
"SUPABASE_KEY": "your-service-role-key"
}
}
}
}
This works perfectly for the demo video. We can deploy remotely after.
| Day | Date | Goal | If Behind |
|---|---|---|---|
| Thu | Feb 13 | Phase 0 + 1 done. Phase 2 started. DB has tables, data pipeline running. | Just get tables created and seed 5 laws manually as JSON. |
| Fri | Feb 14 | Phase 2 + 3 done. Data in DB with search working. MCP server working locally. | Hardcode 10 laws in parsed JSON, skip scraper entirely. |
| Sat | Feb 15 | Phase 4 done. Website deployed. MCP deployed remotely. | Skip website polish. Deploy MCP locally, demo via Claude Desktop. |
| Sun | Feb 16 AM | Phase 5. Record demo video. Write README. | This is the ONLY thing that matters today. |
| Sun | Feb 16 3PM | SUBMIT. | Submit whatever you have. A rough submission beats no submission. |
Root .env Variable |
Distributed To | Used For |
|---|---|---|
SUPABASE_URL |
apps/mcp-server/.env, scripts/.env |
Backend Supabase access |
NEXT_PUBLIC_SUPABASE_URL |
apps/web/.env.local |
Frontend Supabase access (browser-safe) |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
apps/web/.env.local |
Frontend auth (respects RLS) |
SUPABASE_SERVICE_ROLE_KEY |
apps/mcp-server/.env as SUPABASE_KEY, scripts/.env as SUPABASE_KEY |
Secret — bypasses RLS, backend only |
ANTHROPIC_API_KEY |
apps/web/.env.local |
Optional chat feature |