Messy text in. Clean card out.
Inspiration
As university students, our communication channels are constantly engulfed in chaos. Between batch WhatsApp groups, Discord servers, club mailing lists, and Telegram channels, we are inundated daily with dense, unstructured walls of text—hastily pasted flyers, forwards packed with excessive emojis, and ambiguous event announcements.
Between juggling lectures, lab reports, assignments, and exams, extracting actionable information from this noise became a daily cognitive tax. Important deadlines were missed simply because a submission date was written as "this coming Sunday by midnight" buried under ten paragraphs of hype. Crucial registration Google Form links were lost in chains of forwards, and eligibility criteria were overlooked until after teams had already formed.
Having personally experienced the frustration of missing out on high-stakes hackathons and career opportunities due to informational clutter, we asked ourselves a fundamental question: Why should humans waste cognitive bandwidth manually parsing raw text when an intelligent, deterministic system can synthesize it in milliseconds?
This inspired Arbiter: an intelligent extraction engine that bridges chaotic human communication with structured, deterministic data cards.
What it does
Arbiter is an end-to-end informational extraction and normalization pipeline. It ingests messy, unstructured natural language text from posters, WhatsApp forwards, brochures, email notices, or job postings, and deterministically projects it into clean, verifiable, and structured visual cards.
At a technical level, Arbiter executes:
- Multi-Entity Named Entity Recognition (NER) & Classification: Categorizes announcements into explicit typologies (\(\text{Type} \in \lbrace \text{Hackathon}, \text{Event}, \text{Internship}, \text{Job}, \text{Notice}, \text{Info} \rbrace\)).
- Temporal Grounding & Normalization: Resolves ambiguous, relative temporal references (e.g., "tomorrow at 5 PM", "next Fri") into standardized ISO-8601 timestamps anchored to the observer's current datetime \(T_{\text{now}}\).
- Financial & Incentive Extraction: Identifies and standardizes stipend figures, fee requirements, and prize pools into unified currency schemas.
- Actionable Link Disambiguation: Extracts, validates, and analyzes URLs, detecting destination domains and redirect targets to separate registration pages from promotional links.
- Dynamic Urgency Calculation: Computes time-to-deadline \(\Delta t\) and displays intuitive urgency badges (e.g., "In 2 days", "Today", "Past").
- Verifiable Source Grounding: Every extracted claim maintains an exact substring quote link back to the original source text to completely eradicate hallucinations.
- Bimodal Consumption: Outputs high-fidelity, aesthetic UI cards for humans, alongside machine-readable, schema-compliant JSON for downstream automation pipelines.
How we built it
Arbiter is architected for ultra-low latency, strict schema compliance, and zero runtime bloat.
1. Core Architecture & Inference Engine
- LLM Engine: Powered by Google's state-of-the-art Gemini API utilizing strict structured JSON output modes (
response_mime_type="application/json"). - Deterministic Schema Enforcement: Rather than relying on fragile prompt engineering, Arbiter enforces an explicit Pydantic JSON Schema directly into Gemini’s decoding layer, guaranteeing that the response adheres 100% to the target schema without syntactical drift.
- Backend Framework: Built with FastAPI in asynchronous Python, enabling non-blocking request concurrency and lightweight memory footprints.
2. Algorithmic Post-Processing Pipeline
Raw LLM outputs are routed through an algorithmic post-processing pipeline.
Temporal Computation: Using Python's zoneinfo and datetime arithmetic, dates are mapped relative to local time:
$$ \Delta t = T_{\text{event}} - T_{\text{now}} $$
The urgency badge, \(\text{Urgency}(\Delta t)\), is then assigned in four tiers:
- Past: \(\Delta t < 0\)
- High (Red): \(0 \le \Delta t \le 24 \text{ hours}\)
- Medium (Yellow): \(24 \text{ hours} < \Delta t \le 72 \text{ hours}\)
- Low (Lime): \(\Delta t > 72 \text{ hours}\)
Link Validation & Cleansing: Sanitizes raw URL strings, filters malformed URI schemes, and constructs safe hyperlink anchors.
3. High-Fidelity Frontend
- Engineered with pure Vanilla HTML5, CSS3, and modern JavaScript, eliminating heavy framework overhead (no React, no Next.js build-step latency).
- Design System: A custom palette featuring warm cream (
#fbf8f1), lime accents (#cbee38), dark plum badges (#261338), and pastel lavender cards (#ede5f8) with glassmorphism navigation.
Challenges we ran into
Model API Overload & Dynamic Fallback Architecture
During initial development, our primary target model (
gemini-3.8-flash/ experimental endpoints) frequently encountered upstream infrastructure pressure, returning HTTP503 Service Unavailableand429 ResourceExhaustederrors during peak loads.
- **Solution**: We engineered a multi-tiered resilient fallback mechanism. If the primary model encounters transient load spikes or timeouts, the client dynamically degrades gracefully to stable fallback configurations (`gemini-2.5-flash` / `gemini-2.5-flash-lite` with fine-tuned thinking budgets) while preserving schema strictness.
Windows Temporal Zone Resolution (
ZoneInfoNotFoundError)When parsing localized timezones on Windows systems in Python 3.13, the native
zoneinfopackage failed due to the absence of the system IANA timezone database.
- **Solution**: Integrated and packaged the compiled `tzdata` provider package, ensuring cross-platform deterministic temporal calculations across Unix and Windows hosts.
Client Initialization & Environment Scoping
Premature initialization of the Gemini SDK client before
.envsecret variables were completely populated led to startup crashes on headless deployment environments (e.g., Render).
- **Solution**: Refactored the API consumer into a thread-safe, lazy-loaded singleton pattern (`get_client()`), verifying environment state on-demand.
Hallucination Prevention in Free-Form Text
Earlier iterations occasionally hallucinated registration links when forwards contained only textual email addresses or phone numbers.
- **Solution**: Injected bidirectional verification rules into the system prompt and enforced strict regex-level URL validation before rendering link cards.
Accomplishments that we're proud of
Sub-Second Latency: Achieved an average end-to-end extraction latency of:
$$ t_{\text{latency}} \approx 1.1\text{ s} - 1.4\text{ s} $$
taking unstructured paragraphs and rendering clean cards almost instantaneously.
≈ 80% Cognitive Load & Data Reduction: Measuring information density:
$$ \text{Compression Ratio} = 1 - \frac{\text{Bytes}{\text{structured}}}{\text{Bytes}{\text{raw}}} $$
This comes to roughly 78.4%. It eliminates boilerplate emojis and rambling sentences while preserving 100% of vital decision-making entities.
Deterministic Structured Output: 0% JSON parsing failures in production runs due to native schema-guided generation.
Evidence Traceability: Every date, venue, and requirement can be verified directly against the underlying text snippets via interactive tooltips.
Zero-Dependency Lightweight Client: Under 40 KB total bundle size for the entire frontend application, resulting in a 100/100 Google Lighthouse Performance Score.
What we learned
- Schema-Guided Decoding vs. Few-Shot Prompting: We learned that enforcing schema validation at the inference layer is exponentially more reliable than asking an LLM to "format output as JSON" in natural language.
- Temporal Grounding Constraints: Language models operate in an atemporal vacuum unless explicitly anchored with a reference frame (\(T_{\text{now}}\), timezone offset, and calendar context).
- Production API Resilience: Production AI applications cannot rely on a single model endpoint; building automated retries, circuit breakers, and fallback models is mandatory for high-availability tools.
- The Power of Vanilla Web Standards: Modern CSS Grid, Flexbox, and native DOM APIs allow developers to construct breathtaking, responsive, and instantaneous user interfaces without the overhead of heavy JavaScript dependencies.
What's next for Arbiter: Get your details organised
- Multimodal Visual Ingestion (OCR): Extending Arbiter’s pipeline with multimodal vision models to allow direct drag-and-drop ingestion of flyer images, Instagram story screenshots, and PDF brochures without needing text copying.
- Contextual In-Card Copilot (Interactive Chatbot): Embedding a lightweight conversational agent beneath each extracted card to answer specific eligibility queries (e.g., "Am I eligible as a 2nd-year Mechanical student?", "What is the maximum team size?").
- One-Click Calendar Integration: Exporting extracted dates directly into Google Calendar, Notion databases, and standard
.icscalendar files with automated deadline notifications. - WhatsApp & Telegram In-Chat Bot: Packaging Arbiter as a webhook-driven bot that student group admins can add to WhatsApp or Telegram groups to automatically summarize announcements into neat cards in real time.
Log in or sign up for Devpost to join the conversation.