• VERITAS Cover: VERITAS cover

Inspiration

With the explosive growth of Generative AI, the line between reality and digital fabrication has never been thinner. Deepfakes, synthetic audio, and AI-generated text are being weaponized for misinformation at an unprecedented scale. We realized that traditional fact-checking tools are too slow and single-modal to combat this. We needed an automated, real-time forensic agent capable of parsing text, images, audio, and video simultaneously—just like a human investigator, but with the speed and precision of AI. This inspired VERITAS (Virtual Evidence Reconstruction & Intelligence Tracking Analysis System), an advanced multimodal forensic deconstruction agent designed to expose the truth behind synthetic media.

What it does

VERITAS acts as a unified cyber-forensic dashboard for analysts, journalists, and everyday users. It features two primary modes:

  1. Forensic Form: Users can upload suspicious artifacts—viral quotes, deepfake videos, altered audio clips, or URLs. VERITAS analyzes the multimodal context and outputs a comprehensive "Forensic Dossier". This dossier includes a threat level assessment, an executive conclusion, and step-by-step narrative evidence (e.g., highlighting spatial lighting inconsistencies in an image, detecting GAN-based lip-sync artifacts in video, or revealing voice stress anomalies in audio). The findings can be natively exported into a secure PDF.
  2. Live Interrogation: A real-time analysis environment for live streaming media and ongoing investigations.

Additionally, we implemented a Two-Part CBT (Computer-Based Training) module to train analysts, complete with an admin dashboard for tracking assessment readiness.

How we built it

We architected VERITAS using a modern, scalable web stack. The frontend is built with React, TypeScript, and Vite, utilizing Tailwind CSS for a sleek, cyber-forensic UI, and Framer Motion for fluid micro-animations.

The core intelligence is powered by Google's Gemini 3.1 Pro API. We heavily leveraged Gemini's native multimodal capabilities, allowing us to pass images, audio, and text simultaneously in a single prompt context. We engineered a strict system instruction set to force the model into a clinical, forensic persona that outputs structured JSON dossiers.

For the backend & database, we used Node.js, Express, and Firebase/Firestore to handle application state, store analysis history, and sync the CBT assessment locks in real-time. We also built a custom "Director Mode" plugin console to orchestrate seamless product demonstrations and UI state overrides directly from the browser window.

Challenges we ran into

Integrating native multimodal processing was a significant hurdle. Handling large media files from the client-side required optimal Base64 encoding and chunking strategies before sending them to the Gemini API.

Another major challenge was enforcing structured JSON output from a complex, creative prompt across various media types. We had to iterate extensively on our prompt engineering to ensure the model reliably generated the exact schema required for rendering our custom UI components (like spatial_pointing markers or derender_code blocks).

Lastly, transitioning from a mocked testing backend to a full production environment with real file uploads required careful handling of asynchronous data states and securing Vercel deployment environment variables.

Accomplishments that we're proud of

We are incredibly proud of the Live Dossier Generation. Watching VERITAS ingest a complex, deepfake video and autonomously generate a clinical, frame-by-frame breakdown of spatial and spectral anomalies feels like magic.

We are also extremely proud of the UI/UX design. We achieved a highly immersive, "hacker-chic" yet professional aesthetic—complete with dynamic scan lines, glowing accents, thinking mode toggles, and seamless PDF report generation—that makes the user feel like a true digital detective.

What we learned

Building VERITAS opened our eyes to the immense power of Native Multimodal AI. We learned that when an LLM can natively "see" and "hear" media rather than rely on intermediate transcription models, its contextual reasoning capabilities improve exponentially. We also learned valuable lessons in robust state management in React, handling optimistic UI updates during database latency, and managing complex real-time API integrations.

What's next for Veritas

We plan to integrate VERITAS as a browser extension, allowing instant background verification of social media posts, videos, and news articles directly in the user's feed. We're also exploring integrating blockchain-based hashing to establish digital provenance for the generated dossiers, ensuring the forensic reports themselves can never be tampered with.

Built with

  • Languages: TypeScript, JavaScript, HTML5, CSS3
  • Frameworks & Libraries: React 19, Vite, Tailwind CSS V4, Framer Motion, Express.js
  • Cloud Services & APIs: Google Gemini 3.1 Pro API, Firebase (Firestore), Vercel
  • Tools & Utilities: Node.js, Lucide-React (Icons), html2canvas & jsPDF (Exporting), Multer (File Handling)

Architecture Diagram

  • Architecture Diagram: Architecture Diagram
graph TD
    %% Define Styles
    classDef client fill:#0f172a,stroke:#10b981,stroke-width:2px,color:#f8fafc
    classDef api fill:#1e1e2f,stroke:#3b82f6,stroke-width:2px,color:#f8fafc
    classDef backend fill:#1f2937,stroke:#f59e0b,stroke-width:2px,color:#f8fafc
    classDef db fill:#374151,stroke:#ef4444,stroke-width:2px,color:#f8fafc

    %% Subgraphs
    subgraph Client ["Client-Side Application"]
        UI["React UI / Vite"]:::client
        State["React State & Hooks"]:::client
        Upload["Multer File Handler"]:::client
        PDF["Report Generator"]:::client
    end

    subgraph External_Services ["Google Cloud AI"]
        Gemini["Google Gemini 3.1 Pro API"]:::api
    end

    subgraph Backend_Services ["Backend & Storage"]
        Firebase["Firebase Firestore"]:::db
        Vercel["Vercel Functions"]:::backend
    end

    subgraph User ["User Interactions"]
        UserActor["User / Analyst"]
    end

    %% Connections
    UserActor --> UI
    UI <--> State
    State --> Upload
    Upload --> Gemini
    Gemini --> State
    State --> UI
    UI --> PDF
    State <--> Firebase
    UI -.-> Vercel
    Vercel -.-> Gemini

Folder Architecture

graph TD
    %% Define Styles
    classDef root fill:#0f172a,stroke:#3b82f6,stroke-width:2px,color:#f8fafc
    classDef config fill:#1e293b,stroke:#64748b,stroke-width:2px,color:#f8fafc
    classDef dir fill:#334155,stroke:#94a3b8,stroke-width:2px,color:#f8fafc
    classDef file fill:#475569,stroke:#cbd5e1,stroke-width:1px,color:#f8fafc
    classDef src fill:#1e1e2f,stroke:#10b981,stroke-width:2px,color:#f8fafc

    %% Root
    Root("VERITAS Root"):::root

    %% Config and root files
    Env(".env / .env.example"):::config
    GitIgnore(".gitignore"):::config
    Devpost("Devpost.md"):::config
    Readme("README.md"):::config
    PackageJson("package.json / package-lock.json"):::config
    TSConfig("tsconfig.json"):::config
    ViteConfig("vite.config.ts"):::config
    ServerTS("server.ts"):::file
    IndexHTML("index.html"):::file

    %% Main directories
    SrcDir["src/"]:::src
    DistDir["dist/ (Build output)"]:::dir
    NodeModules["node_modules/"]:::dir

    %% Connect root to top-level items
    Root --> Env
    Root --> GitIgnore
    Root --> Devpost
    Root --> Readme
    Root --> ServerTS
    Root --> IndexHTML
    Root --> PackageJson
    Root --> TSConfig
    Root --> ViteConfig
    Root --> DistDir
    Root --> NodeModules
    Root --> SrcDir

    %% src contents
    SrcApp("App.tsx"):::file
    SrcMain("main.tsx"):::file
    SrcIndexCSS("index.css"):::file
    SrcFirebase("firebase.ts"):::file
    SrcViteEnv("vite-env.d.ts"):::file
    ComponentsDir["components/"]:::dir

    %% Connect src to its contents
    SrcDir --> SrcMain
    SrcDir --> SrcApp
    SrcDir --> SrcIndexCSS
    SrcDir --> SrcFirebase
    SrcDir --> SrcViteEnv
    SrcDir --> ComponentsDir

    %% Sub-components representation
    ComponentsDir -.-> C1("DirectorMode, PluginConsole, etc."):::file

Built With

Share this project:

Updates