Urgent.News

What's breaking now, across thousands of outlets.

Tech

I'm too lazy to check my emails and Classroom stuff, so I built Hermes

I was registered for the two previous challenges too, but I was too lazy ( binge watching Black Clover :) ) to submit anything. When I saw this challenge and read the word "LAZY" , I knew this one was for me. I got up with a marker in my hand, stared at the whiteboard thinking about what I needed, looked at my phone, and realised I had missed my class ( online, because my college flooded ;-; ),…

The author registered for previous challenges but was too lazy to submit anything. Upon seeing the "LAZY" word, they knew this challenge was for them. After realizing they had missed a class due to a flooded college, they decided to build a system that collects emails from personal and college sources, generates audio summaries, and organizes deadlines. Thus, Hermes was created.

Hermes is a local-first academic triage engine and opportunity radar, designed for a very distractible student like the author. The system uses FastAPI to poll Google Classroom, Gmail, and opportunity feeds, filtering out noise and extracting real deadlines. It checks the web when an opportunity date is missing and stores everything in SQLite.

The dashboard displays the status of tasks, with three outcomes: Panic for cutoffs under 6 hours, Approaching for the next 24 hours, and Chill for anything beyond that. A Watchlist is available for items whose cutoff has not been announced. Opportunities such as hackathons, fellowships, and internships are ranked against the user's stack to maximize achievements.

Hermes utilizes a local llama-server running Gemma-3-4b-it at Q4_K_M. The model extracts structure from emails without inventing timestamps. A 60-second English briefing turns the radar into audio using ElevenLabs. If an API key is missing, the dashboard falls back to browser speech. The app still functions with this configuration.

The task rows in the demo come from the author's local Hermes instance, while the Render demo uses a mock judge dataset. The telemetry strip is fetched from the local llama-server and nvidia-smi on every cache miss. The free instance runs the cloud sandbox profile, displaying heuristic fallback telemetry instead of local GPU numbers.

The author emphasizes student privacy, with all extraction occurring on the laptop. Gmail and Classroom tokens stay on disk, with email bodies transmitted over 127.0.0.1 to the llama-server, not to an inference vendor. The database is local SQLite, and ElevenLabs-generated briefing scripts are the only data leaving the machine. The token bill is zero, as Gemma 3 4B runs on open weights.

The app works offline when Wi-Fi is unavailable, and local inference keeps running when the network drops. Open weights are inspectable, allowing users to understand the system's operation and swap models without vendor involvement.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

Four bugs my publisher's validator could not see

Four bugs my publisher's validator could not see I publish everything I build to a small private ops portal: scheduled job reports, generated images, deploys, drafts.

  • Validator failed to detect four bugs in content publishing
  • --markdown flag stored file path instead of reading content
  • Validator checked manifest against JSON, missing actual content verification

ECMP Hash Polarization: Why Two Identical Links Carry 88% and 12%

Originally published at Packet Path . One best path is a wasted fabric Picture a modern spine-leaf data center: every leaf switch connects to every spine.

  • Hash polarization causes correlated flows to concentrate on few links
  • Deterministic hash function leads to traffic polarization in ECMP
  • Mitigation involves varying hash function or inputs to break polarization

The agent wrapped everything in try/catch and your errors disappeared

A payment method fails, and the UI shows a generic default instead of surfacing a failure. A profile call errors out, and the page renders an empty shell that looks like a loaded state.

  • Agent wrapped code in try/catch blocks to hide errors
  • Default values returned, making failures appear successful
  • Recommendation to catch specific errors and propagate them

More from Friday 23 October →