DEV Community

Cover image for CircleUp — hang out, without wrecking your deadlines
Hatheem
Hatheem

Posted on

CircleUp — hang out, without wrecking your deadlines

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

CircleUp answers one question my friends and I keep getting wrong: when can we actually hang out this week?

The honest answer isn't "when am I free" — it's "when am I free and not about to miss something." Our timetables are PDFs. Our deadlines live in Moodle. Nobody cross-references the two, so we either skip hanging out entirely during a heavy week, or we go out on a Thursday and regret it on Friday morning.

So I built CircleUp. Give your timetable and it pulls your Moodle deadlines. It finds your free windows, labels each one good / risky / avoid against what's due next, and for the usable ones suggests somewhere nearby to go.

Demo

Demo video drive link: https://drive.google.com/drive/folders/1ForC4309PeUt41V1Ur_KCAQY2WygBu49

Code

Check the repo here: https://github.com/hatheem-r/project_CIRCLEUP
front link: https://project-circleup.onrender.com/

How I Built It

Gemma 3 via Ollama, running locally. Reads the timetable image and returns structured JSON.

Moodle iCal export. Deadlines come from Moodle's own calendar export URL — no scraping, no stored credentials.

Python for everything that has one right answer. Gap finding is interval arithmetic. The good/risky/avoid verdict is a threshold on hours-until-nearest-deadline.

Gemma for everything where language is the output. Writing the one-line reason. Picking which nearby places fit a Saturday afternoon.

SerpApi behind a Render proxy for nearby places. Next.js frontend.

Simple as that.

Why Does Open Innovation Matter?

My timetable and my submission deadlines are a complete map of where I am and what I'm behind on. Multiply that by a group of friends and it's a fairly invasive dataset. Running Gemma locally means it never goes anywhere — not as a design promise, but because there is no network call to make.

That's the privacy argument, and it's the obvious one. The more useful one is:

When Gemma couldn't handle any kind of Timetable images, I could restructure the pipeline, swap to 12B, try Qwen2.5-VL, and move the arithmetic out of the model entirely — in an afternoon, at no cost per attempt. Every one of those experiments was a config change. Against a closed API I'd have been retrying a black box and paying per attempt to learn nothing.

I also ended up with a smaller, cheaper model than I'd have reached for, because I kept narrowing its job until a 4B model could do it reliably. That's only a decision you get to make when you can see and swap the model.

Prize Categories

  • Best Use of Gemma — Gemma 3 via Ollama, local inference, doing the parsing and all natural-language output
  • Best Use of Render — frontend plus the SerpApi proxy, keeping the API key server-side
  • Best Use of SerpApi — nearby place search for usable free windows

Top comments (0)