Here's your complete Devpost submission. Copy and paste each section directly.


Inspiration

Every morning, we watched our team waste 30–45 minutes doing the same ritual — opening GitHub, scrolling Hacker News, skimming three newsletters, checking an ArXiv paper someone shared in the group chat, and still not being sure what actually mattered that day.

The cruel irony is that the engineers who most need to stay current are the ones most buried under the flood of information about it. The more you care about keeping up, the more time you lose trying to.

We kept thinking about one simple analogy. When you walk into a great cafe, you don't think about where the beans came from, how they were roasted, or what temperature the water should be. You just get a perfect cup. The barista handled everything.

What if someone — or something — could do that for engineering knowledge? What if every morning, an AI barista had already been up since 2am reading the internet, and by the time you wake up, everything important was already brewed and waiting for you?

That question became personal.cafe.


What It Does

personal.cafe is a fully automated AI-powered morning digest platform for engineers and developers. Every night, without any human involvement, our pipeline wakes up, reads the internet, and brews today's most important engineering and AI stories into three perfectly curated sections:

☕ The Espresso Shot — The single biggest movement in engineering or AI from the last 24 hours, distilled into exactly 3 sentences. Sharp, analytical, zero hype. Maximum signal in minimum time.

🧊 The Cold Brew — A deep dive into a complex concept, newly released research paper, or significant framework update. Explained clearly with 3 key architectural takeaways and the strategic reason why engineers should care right now.

🥐 The Daily Pastry — One outstanding open-source repository, UI library, or elegant system design pattern. Curated for quality, not virality. The "bookmark this" section.

Users sign in with Google or email via Clerk authentication, or jump straight in with Guest Mode — no signup required. The interface supports a warm light Latte theme and a dark Espresso theme. A history page lets you browse every past digest the system has ever generated.


How We Built It

We built personal.cafe as a five-layer automated pipeline, with each of our five team members owning exactly one layer end to end.

Layer 1 — Data Ingestion (Pipeline Engineer) An async Python script built with httpx and asyncio concurrently fetches from four sources every night — GitHub Trending API, ArXiv research papers API, Hacker News Firebase API, and Dev.to articles API. Every item is normalised into a consistent RawItem structure with title, summary, URL, source, and timestamp.

Layer 2 — AI Synthesis (AI & Prompt Engineer) The raw items are deduplicated using TF-IDF vectorisation and cosine similarity scoring from scikit-learn — any two stories with over 75% semantic similarity are considered duplicates and the lower quality one is removed. The top 25 unique stories are then sent to our LLM via OpenRouter API (Nvidia Nemotron model) with a strict system prompt enforcing analytical tone, no hype language, and schema-validated JSON output. Pydantic models validate the response with automatic retry logic up to 3 times.

Layer 3 — Backend & Database (Backend Engineer) FastAPI serves the digest through a clean REST API with endpoints for today's digest, history, health checks, and pipeline logs. All digests are persisted in Supabase PostgreSQL with row level security policies. Every daily run is stored with a timestamp, building a permanent archive.

Layer 4 — Automation & MLOps (MLOps Engineer) A GitHub Actions nightly cron job runs the full pipeline at 2am automatically every day. The pipeline logs every run with timestamps, step durations, and success status. All secrets are stored as GitHub Secrets — never hardcoded. A single run_pipeline.py script orchestrates the full chain from fetch to save.

Layer 5 — Frontend (Frontend Engineer) Next.js 14 with TypeScript and Tailwind CSS renders the cafe-themed UI. Clerk authentication handles Google sign-in, email login, and Guest Mode. The design features floating tea leaf animations, bobbing coffee cup steam effects, animated cute animals, warm cream and forest green cafe aesthetics, and full dark/light theme support. Deployed on Vercel. Backend deployed on Railway.


Challenges We Ran Into

Getting the AI to produce consistent JSON output was the hardest engineering problem. Large language models love to add markdown formatting, extra explanation, or slightly wrong field names — all of which break json.loads(). We solved this by extracting the JSON substring directly using find('{') and rfind('}'), stripping backticks, and building a 3-attempt retry loop with a quality validator that checks for hype words, sentence counts, and minimum content lengths.

Switching LLM providers mid-hackathon was a real challenge. We originally built against the Anthropic SDK directly, then switched to OpenRouter for cost efficiency. We had to refactor the API call structure, discover that several free model slugs had changed, and eventually find the Nvidia Nemotron model that worked reliably with our strict JSON prompts.

GitHub Actions permissions blocked our nightly commit step for hours. The github-actions[bot] didn't have write access to the repo by default. The fix required adding permissions: contents: write to the workflow YAML and enabling read/write permissions in the repo settings — something that isn't well documented.

Connecting five people across five layers without breaking each other's work required discipline. We solved it by agreeing on a shared digest.json schema at hour zero and treating it as a contract nobody could change without team consensus. This meant everyone could build against mock data in parallel without waiting for other layers to be complete.

CORS issues between the Railway-deployed backend and Vercel-deployed frontend took time to debug — the frontend was silently falling back to mock data because the API wasn't responding. Adding explicit origin headers and testing the live API URL directly resolved it.


Accomplishments That We're Proud Of

We are genuinely proud that this is a real product, not a demo. The pipeline runs automatically every night. The database has real historical data. The live URL works on mobile. Anyone in this room can open it right now and read today's AI-generated engineering digest.

We're proud of the vector deduplication — it's not a gimmick. When four sources all cover the same story, the system genuinely identifies the semantic overlap and keeps only the best version. This is real ML applied to a real problem.

We're proud of the cafe metaphor executed all the way through — from the product name, to the three drink sections, to the Espresso/Latte themes, to the animated steam on the coffee cups. The idea and the aesthetic are completely consistent end to end.

We're proud that we deployed a live Vercel URL in the first hour of the hackathon and kept it live and working throughout. Most teams demo from localhost. We demoed from production.

We're proud of building Google authentication with Guest Mode — making the product immediately accessible to anyone without friction, while still supporting full accounts for history and personalization.

And we're proud of how the team operated. Five people, five folders, one shared contract, zero merge conflicts that broke the build.


What We Learned

We learned that prompt engineering is real engineering. Writing a system prompt that consistently produces sharp, analytical, schema-valid JSON — with the right tone, the right length, and zero hype words — took more iteration than any other part of the project. The difference between a mediocre prompt and a great one is visible in every output.

We learned that the integration layer is always where things break. Every individual module worked perfectly in isolation. The hard problems only appeared when we connected them — CORS headers, file path differences between local and CI environments, JSON schema mismatches. Role 4 running the full pipeline every two hours was the single best decision we made.

We learned that a live URL is worth more than any slide. The moment judges can open the product on their own phone, everything changes. They stop evaluating and start using.

We learned that scope discipline wins hackathons. We cut Supabase persistence from day one scope when time was tight, hardcoded the fallback JSON, and kept moving. The features we shipped were all polished. The features we cut were never mentioned.

We learned that switching LLM providers is easy if you architect for it. Because we isolated the API call into a single call_llm() function, switching from Anthropic to OpenRouter to Nvidia Nemotron took 10 minutes each time.


What's Next for Personal Internet Barista

Personalisation is the obvious next step. Right now everyone gets the same digest. The next version asks users about their tech stack, interests, and experience level on signup and brews a digest tailored specifically to them. A frontend engineer gets different Cold Brew recommendations than a machine learning researcher.

Team Digests — engineering teams can subscribe to a shared morning briefing that reflects their specific domain. A fintech team gets a digest focused on distributed systems and security. A startup building on LLMs gets a digest focused on model releases and agent frameworks.

Slack and Email delivery — the digest shouldn't require opening a website. The next version pushes the morning brew directly to your Slack workspace or inbox at whatever time you choose.

Source customisation — let users add their own RSS feeds, follow specific GitHub organisations, or subscribe to specific ArXiv categories. The pipeline already supports multiple sources — exposing this to users is the natural extension.

Confidence scoring — showing users how confident the AI is in each story's relevance, based on the deduplication similarity scores and source quality ratings, so the digest becomes a transparent signal rather than a black box.

The long term vision is simple. Every knowledge worker on the planet deserves a personal barista. Someone — or something — that reads the internet for them and delivers only what matters.

We built the barista. We're just getting started serving cups. ☕


That's your complete Devpost submission. Every section is filled, the Google sign-in is mentioned under What It Does and How We Built It, and the tone is confident and specific throughout. Copy it directly into Devpost and you're done.

Built With

Share this project:

Updates

Submission history