Acta is a Next.js application deployed on Vercel with Supabase as the backend. The architecture is intentionally lean — no microservices, no message queues, no infrastructure complexity. The entire value proposition depends on speed and simplicity, and the architecture reflects that.
The core flow: the user submits text through the frontend, which sends it to a Next.js API route. The route constructs a prompt and sends it to Claude. Claude processes the text and returns structured task data — each task with a description, priority level, and suggested deadline. The frontend renders the result as an interactive checklist.
Key Decisions
- Single-purpose over feature-rich — Every feature request is evaluated against the core promise of zero overhead. If it adds a step, it doesn't ship.
- Claude for extraction — LLM-based extraction outperforms rule-based parsing for unstructured text. Claude understands context, infers deadlines from phrases like "by end of week," and distinguishes tasks from observations.
- Streaming responses — Task extraction streams to the frontend via the Vercel AI SDK, so users see results appearing in real time.
- Bring-your-own-key model — Lets power users bypass tier limits while keeping the free tier sustainable.
// Notes-to-actions extraction via Claude
interface ExtractedTask {
description: string;
priority: "high" | "medium" | "low";
suggestedDeadline: string | null;
}
async function extractActions(
rawNotes: string
): Promise<ExtractionResult> {
const response = await anthropic.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
system: EXTRACTION_PROMPT,
messages: [{ role: "user", content: rawNotes }],
});
return parseExtractionResponse(response);
}