generated from open-platform/app-template
v1: im-present #1
No reviewers
Labels
No labels
agent-work
agent-working
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
vespo92/im-present!1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "prime"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
im-present — an app for volunteering that is geared towards letting the app know you are present and anything local will show up requesting presence from volunteers.
An agent is building v1 on the
primebranch. Watch the commits and the live preview; comment on this PR to steer it.🟢 im-present v1 is built
Show up when you're needed. im-present turns "I'm available right now" into local impact: volunteers flip themselves present (tagging the area they can reach), anyone posts a request for presence (a local need), and present volunteers pledge to show up — each request tracking live progress toward the hands it needs.
Live preview: https://im-present-vespo92.open-platform.sh
Core flows shipped
Data model: three Postgres tables —
presence(one row per user: present flag + area),requests(the local need + status), andresponses(a unique pledge per user) — bootstrapped and seeded at boot, with typed routes that auto-generate the OpenAPI spec at/openapi.json.Decisions: area is free-text (no geocoding/maps in v1) and presence has no auto-expiry yet — both are clean next increments rather than v1 blockers.
Next steps
🏗️ v1: im-presentto v1: im-present🔎 Preview is live for QA: https://pr-1-im-present-vespo92.open-platform.sh
✅ Ship it
What I tested:
qatester✅; sign-out clears session ✅Security probes — all passed:
GET /api/meandGET/PUT /api/presencewithout auth cookie → 401 ✅POST /api/requests,POST /api/requests/:id/pledgewithout auth → 401 ✅POST /api/requests/seed-meals/statusas non-owner → 403, not allowed ✅<script>,onerror=): stored in DB butesc()escapes all output before innerHTML insertion — payloads render as literal text, never execute ✅?area=' OR 1=1 --query param → 0 results returned (parameterized queries) ✅/api/requests/fake-id) → clean 404{"error":"no such request"}, no stack trace ✅/api/board) exposes no user emails or internal IDs of other users ✅Nits (not blockers):
favicon.ico→ 404 console error on every page loadbody/title must NOT have fewer than 3 characters) in API responses — fine for a developer API, slightly rough for client-side consumption