Activity

lohjo_
  • written in OpenSCAD with the help of AI, used iterative prompting
  • sketched designs and made presentation deck
  • open-sourced project, want more people to help work on this too
  • created .stl files for diy 3d-printing!
  • to be printed…

Problem: Low-infrastructure and in-crisis environments often face difficulties accessing medical care and basic first-aid resources. There is a need for innovative and low-cost medical and first-aid solutions that can function in resource constrained and crisis environments. How might we create affordable and impactful medical or first-aid innovations that can improve emergency response and healthcare outcomes in disaster-affected low-income communities?

The Idea

The painless blood sampling device uses microneedles to puncture skin and microfluidic channels to guide the extracted blood. Active vacuum creates suction–increasing blood uptake, alongside a commercial VacuTube that extracts blood from the device for storage.

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
lohjo_

FactGuard — Devlog #1

Time logged: 1hr 19min

FactGuard is a browser extension that injects credibility badges into Google Search results and provides a full verification popup for any webpage or chat platform. Built with WXT + Svelte on the frontend and FastAPI + OpenAI on the backend.


Architecture

Three-part system:

  • Browser extension (WXT + Svelte) — badges, popup UI, chat scraping
  • FastAPI backend on Google Cloud Run — crawling and AI verification via OpenAI
  • Next.js web app — forum/reporting interface

The extension runs a crawl → summarize → verify_content pipeline, with domain-level fast verification for Google Search badges separately via domain_verify.


Features Shipped

Google Search badge injection
Injected verification badges directly into Google Search result cards using querySelectorAll('cite') and DOM traversal to find result headings. Badges show one of three states: Likely Accurate, Unverified, or Potentially Misleading — each with SG/non-SG variants (6 SVG badge assets total).

Popup verification flow
Full credibility review in the extension popup: crawls the active tab, runs AI verification, and renders verdict, reasoning, supporting/contradicting sources, comparison against a reliable benchmark source, and contextual flags (missing context, potential risks). Supports English, Malay, Tamil, Korean, and Chinese.

Chat platform verification
Detects when the active tab is Facebook, Messenger, Telegram, or WhatsApp. Scrapes visible messages via platform-specific DOM selectors, lets the user select which messages to analyze, and runs the same verify pipeline on the excerpt. Suspicious results trigger a report flow that submits to the FactGuard web app.

Login + session
JWT-based login flow persisted in browser.storage.local. Auth state guards all verification features.


Optimisation

  • 24hr cache TTL — Verified results stored in browser.storage.local under a url::language composite key. On read, entries older than 24hrs are evicted immediately rather than served stale.
  • URL + language cache key — Cache is per (url, language) pair so switching languages always fetches fresh results without polluting other language caches.
  • 150ms debounce on MutationObserver — Google Search updates the DOM frequently on scroll/pagination. All mutation callbacks funnel through scheduleInject with a 150ms debounce to batch DOM work and avoid thrashing.
  • Priority URL sorting — Newly added DOM nodes (from mutations) have their URLs extracted and sorted to the front so freshly loaded results get badges faster than already-processed ones.
  • AbortController timeout — Domain verify requests are cancelled after 8 seconds via AbortController so stale network calls don’t block the badge queue.
  • Shared async OpenAI client — Backend reuses a single AsyncOpenAI instance per module rather than constructing one per request, reducing connection overhead.

Backend

FastAPI with three active endpoints (/crawl, /verify_content, /domain_verify), rate limiting per IP with a sliding window counter, shared-secret auth via X-FactGuard-Key header, and structured JSON responses parsed from OpenAI prompt outputs. /verify kept for backwards compat but marked deprecated with Sunset: 2025-12-31 headers.


Testing

Unit tests cover cache TTL logic, config URL normalization (trailing slash handling), auth storage read/write/clear, login API success and error paths, and chat domain detection. Backend tests cover middleware auth, deprecation headers, and JSON parse guards on all three OpenAI wrappers.

Attachment
Attachment
Attachment
0
lohjo_
  • hosted in Google Cloud
  • rate limited
Attachment
0
lohjo_
  • Worked on solving inconsistencies with Live Agent audio inputs,
  • BUG: Research feature does not work
  • BUG: Gemini Live AI still pauses on second input.
  • BUG: Interruptibility does not fully stop AI output
Attachment
0
lohjo_

Shipped this project!

Hours: 15.45
Cookies: 🍪 166
Multiplier: 10.76 cookies/hr

Before this hackathon started, I knew I wanted to make something deployable, something that any user, even you can use right now. Our problem statement? “How might we design AI-powered solutions that help local and multilingual communities in Singapore assess information credibility, understand context, and make informed decisions — especially during times of uncertainty?”

Our team built a Telegram bot that analyses text, images, audio and video for likely harmful signals. We used locally-trained SEA-LION Guard model for deterministic content detection and ADK-based agent pipelines with Gemini API. However, the journey isn’t over. Future iterations include: group chat invocations, context files using Firecrawl for web-scraping as well as increased security and privacy protections.

I would like to thank the mentors from ClickHouse for validating and enhancing our AI-native workflow and to the organisers at GeeksHacking for volunteering all their time, energy and effort into making such an amazing event!

– Gemini Live Agent Challenge –
Being new to this tech scene, I wanted to jumpstart my portfolio (feels like a taboo saying this) – by extending my project in Gemini Live Agent Challenge. I learnt much of Google Cloud Tech through their YouTube channel. I joined Google’s ADK developer workshops. Watched countless videos on Computer Vision and the way Google’s way-back-home multimodal agent workshop was held changed how I thought about building AI.

Conclusion: This is my starting journey. I want to go on to build projects that I’m passionate about (it might sound like a stretch..) like physics – how elliptic integrals work? compliant mechanisms – how can we compute them? maths – is there a way to generalise quartic factorisation identities for depressed quartic polynomials? However, I think what I’m lacking is a mentor – a technical one. I have embarked on YouthTech’s open-source 6-month commitment programme to hone my skills in open-source contributions, Access Singapore’s commitment to bettering generations of youths. Contact me at: https://linkedin.com/in/lohjohnray or on Slack at @lohjo_

lohjo_

– Result of Two Hackathons –

Our problem statement: “How might we design AI-powered solutions that help local and multilingual communities in Singapore assess information credibility, understand context, and make informed decisions — especially during times of uncertainty?”

Hackomania 2026 (in-person; 24h):

Built a Telegram bot that analyses text, images, audio and video for likely harmful signals. We used locally-trained SEA-LION Guard model for deterministic content detection and ADK-based agent pipelines with Gemini API.
Hackomania Link

Gemini Live Agent Challenge (online):

Orchestrated Gemini Live Agent and Groq to give real-time detection and explanation to fraud/unsafe content. Used Google Cloud servless backend to host website that YOU can use right now!
Devpost Link Here

Future iterations

However, the journey isn’t over. Future iterations include: group chat invocations and increased security and privacy protections and full prediction engine implementation!

Demo Vid Here
^^ go like pleasee

Try it here! Google Cloud Website

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0