Inspiration
School life is noisy in a very specific way. A WhatsApp forward from the class group, a permission slip buried in email, a last-minute “bring art supplies tomorrow,” a sports day schedule that changes twice — none of it lives in one place. Parents and students end up with screenshots, half-read messages, and a mental checklist that fails the moment something new arrives.
Scoop started from that friction: what if messy school messages could become a clear plan in one step? Not another generic to-do app — something that understands the shape of school communication and turns it into dated, actionable items you can actually follow.
What it does
Scoop is a web app that turns messy school messages into a structured plan:
- Capture — Paste a message from a group chat, email, or notice.
- Extract — AI (Groq) structures it into plan items with title, date, time, and notes. If the model is unavailable, a local rules-based parser still tries to help.
- Plan — Save items per signed-in user, mark them done, and keep a simple list of what matters.
- Connect — See whether auth, database, and AI extract are live in production.
Identity is handled with Clerk. Data is scoped per user (Neon when configured, otherwise a lightweight path for development). The core loop stays simple: paste → extract → plan.
How we built it
We started with Grok Build by xAI to create the first working prototype and explore the initial product direction. From there, we took ownership of the project: we redesigned and refined the experience, changed and extended the implementation, fixed production issues, and made architectural decisions ourselves, using AI assistants as development tools alongside our own reasoning and problem-solving.
The final product was not simply generated and submitted. We iterated on the prototype, tested it, debugged it, and shaped it around the actual problem we wanted Scoop to solve.
| Layer | Choices |
|---|---|
| App | TanStack Start + React + Vite |
| Deploy | Vercel (Nitro vercel preset) |
| Auth | Clerk (@clerk/tanstack-react-start) |
| AI extract | Groq OpenAI-compatible chat API |
| Data | PostgreSQL (Neon) / PGLite fallback |
| UI | Tailwind, Capture → Plan focused flow |
Server functions gate extract and plan CRUD behind auth middleware so every item is tied to userId. The extract pipeline prefers Groq, falls back safely, and surfaces errors instead of failing silently. A Connect page reflects environment status so deploy issues are visible, not hidden.
Challenges we ran into
- Deploys that “succeeded” but never updated the live site — caused by committed
.vercelbuild output and incomplete package fixes. Fixed by ignoring generated artifacts, cleaning the repo, and forcing clean Vercel rebuilds. - Clerk package and API drift — old
@clerk/tanstack-startimports andgetAuthvsauth()broke the build and SSR until everything aligned with@clerk/tanstack-react-startandclerkMiddlewareinsrc/start.ts. - AI that looked “broken” — missing
GROQ_API_KEYon Vercel or silent fallback to on-device rules. Fixed with Connect status, engine badges, and toasting real Groq errors. - Auth blocking extract — extract runs behind auth; without a valid Clerk session and middleware, the pipeline never reached the model.
- Scope creep — images, full plugin systems, and multi-agent ideas were tempting. We prioritized a reliable text → plan path first.
Accomplishments that we're proud of
- A complete Capture → Extract → Plan loop that works for real school messages, not just demos.
- Serverless-only architecture: auth, AI extract, and data access on Vercel without a separate backend host.
- Honest AI behavior — users can see whether Groq or on-device extract ran, and failures are visible instead of silent.
- Per-user plan data with Clerk identity and scoped queries.
- Shipping through real production pain (deploy cache, auth middleware, env vars) and ending with a stable public deploy.
- Turning an AI-generated starting prototype into a product we understood, iterated on, and could explain technically.
What we learned
- Deploy configuration is part of the product: tracked build folders and wrong env vars can waste more time than application code.
- Auth must be consistent end-to-end — UI sign-in, server middleware, and
userIdin the database have to agree. - Production AI needs clear fallbacks and error reporting; a quiet local parser feels like a broken feature.
- AI is most useful as a development partner, not a substitute for understanding the code and making product decisions.
- Keeping one auth system (Clerk) is simpler and safer than carrying an unused second stack.
- A narrow product loop beats a large feature list when the user is a parent or student under time pressure.
What's next for Scoop
- Richer plan views: today, this week, and overdue items
- Edit saved items and calendar export (
.ics/ add-to-calendar links) - Image support later (OCR or vision) without changing the core text capture flow
- Optional plugin-style modules with tool-calling so AI uses the app through explicit tools instead of one monolithic prompt
- Small family-oriented touches, like tags per child, when the base plan experience is solid
Built With
- clerk
- groq
- javascript
- postgresql
- react
- tailwind
- tanstack
- vercel
Log in or sign up for Devpost to join the conversation.