Project Info
✨
Inspiration
Remixify revolutionizes the way users interact with companies to create a better and more engaging experience for viewers. Remixify was inspired by the growing need for brands to create more engaging, personalized, and data-driven advertising content. We also thought it'd be really funny to edit videos and images with AI for people to explore their creativity and have fun collaborating together. The main idea for our app is that: Advertisers rarely know what consumers wish their ads looked like or what made their ad so viral beyond surface-level metrics Creative users, especially young creators, want a way to express themselves, win rewards, and actually be heard by the brands they engage with. Remixify creates a platform where creativity and product discovery meet.
What it does
Remixify is an innovative platform that transforms traditional advertising into an interactive, fun, community-driven experience. Users can also scroll a feed of real ads and remix them using advanced AI image and video generation (fully Gemini powered!), with style presets and creative prompts, for example, “Add a cat mascot” or “turn the sky to night”. User can share, earn likes, comments & win brand-sponsored rewards based on the remixes they make. Users can also upload an image, and we use Gemini to label and tag the company automatically. Remixify then provides real-time insights into ad performance, audience engagement, and creative trends using Letta's Deep Research Agents to extract insights from every remix + interaction, and memory blocks that accumulate key information such as: Most remixed ad elements and which remixes improve engagement or virality And organize all this information into an Analytics page, so companies finally see what people actually want, including specific information about demographics, top aesthetics, and more. Finally, we help predict ad performance through Signal Extraction. We built a model to analyze user behavior (prompts summarized by Claude), commenting patterns, and performance metrics to provide actionable insights for the company. For example, we extract context clues like references to TikTok, Instagram, or specific trends to see platforms that users are most active on to target ad spend. 🛠️ How We Built It Tech stack: Frontend: Next.js for the web application framework Tailwind CSS for styling Shadcn UI components for a modern, accessible interface TypeScript Backend & AI: Supabase for database and authentication Custom API routes for handling image generation and analysis Integration with Google's Gemini API extensively for image editing (Nano Banana 🍌) Integration with Google’s Veo3 for video editing Real-time data processing for analytics and signal extraction Analytics: Custom analytics engine (Letta) for user insights and analytics Claude for creative insights and trend analysis Real-time performance metrics and behavioral pattern recognition Opportunities for Conversion integration to automatically reach out to leads. Letta Deep Research Agents Integration: We use Letta’s agents and their Memory Blocks to track: Most remixed ad elements Popular user modifications Letta Deep Research Agents extract overall sentiments and advice, helping brands understand how users feel about the brand as a whole Which remixes improve engagement or virality 🧗 Challenges We Ran Into Real-time Video and Image Generation: Implementing fast and reliable AI-powered image generation while maintaining quality and brand consistency. Although calling the API for video generation was not that difficult, it was very hard to get it to maintain the same theme as the original video as well as ensure that the generation didn't take too long. Performance Optimization: Handling large-scale data processing for analytics while maintaining a responsive UI. Making the comments hierarchical so people's edits could affect each other was a little bit difficult since we had to handle storing data in Supabase and pulling it very quickly in order to apply different comments. Data Analysis: Building Letta Agents with Deep Research and Memory Blocks to extract meaningful signals from user behavior and ad performance, not just noise. Overall, we coordinating multiple AI services and ensuring seamless communication between frontend and backend was pretty difficult but we got it to work.
Accomplishments we're proud of
Built a sophisticated AI-powered creative platform in a short timeframe Created an intuitive and engaging user interface for complex features and a full-fledged social platform. Implemented advanced analytics with real-time analysis. Successfully integrated multiple AI models for different aspects of the platform in a way that is invisible but still valuable to the user.
What we learned
We learned more about real-time Analytics, especially how to process and visualize large amounts of data efficiently. We also focused a lot on user experience and design, and discovered how to make complex features accessible to users in a way that was easy to understand. Prompt engineering is critical: Specificity, tone, and structure determine the output, especially for the video models. Design matters: We spent time creating chat panes, responsive cards, and leaderboards, all small things that made the platform intuitive and engaging.
What's next
Our main idea is to expand from just ads and provide a platform where users can remix and create funny videos and photos, but also maintain this idea of campaigns, where companies can incentivize users to remix their specific ads by providing prizes. We also want: Bettter Analytics: more detailed audience segmentation and possibly suggestions for the company to figure out where/who to market to, or creating marketing assets just from these analytics. Expansion into mobile app form to better reflect TikTok or Instagram feeds, as well as API access for third-party integrations (ex: Download video of a TikTok and remix that), support for more ad formats and platforms
Remixify - Ad Remix Platform - CalHacks 2025
Welcome to Remixify, an exciting social platform for brands to upload ads and let users create remixes through prompt-based AI editing. Includes image editing via Gemini, video generation via Veo 3, user comment/prompt analysis via Claude, deep research, memory, and analytics about the company via Letta, and storage/database via Supabase.
Tech Stack
- Frontend: Next.js 16, React 19, Tailwind
- APIs: Next.js Route Handlers under
frontend/app/api/* - AI services:
- Image editing: Google Gemini 2.5 Flash Image
- Video generation: Vertex AI Veo 3.1 (preview)
- Prompt analysis: Anthropic Claude
- Analytics: Letta Agent API
- Data: Supabase (Postgres + Storage)
- Machine Learning:
Setup
Prerequisites
- Node.js 18.18+ and pnpm
- A Supabase project with:
- Database tables described below
- A public storage bucket named
ads
- API keys/accounts for the services you want to enable (Gemini, Claude, Google Cloud/Vertex AI, Letta)
Environment Variables
Create a .env.local (or .env) file in the frontend directory with at least:
# Supabase (required)
NEXT_PUBLIC_SUPABASE_URL=your-supabase-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
# Image editing (Gemini)
GEMINI_API_KEY=your-gemini-api-key
# Prompt analysis (Claude)
CLAUDE_API_KEY=your-claude-api-key
# Video generation (Vertex AI Veo) – choose ONE auth method
# 1) Short-lived OAuth token (local dev)
GCP_PROJECT_ID=your-gcp-project-id
GCP_ACCESS_TOKEN=ya29.... # 'gcloud auth print-access-token' (expires ~1h)
# OR 2) Service Account JSON (recommended). If you choose this, set the file path and update your code to use ADC:
# GOOGLE_APPLICATION_CREDENTIALS=./service-account-key.json
# Letta for analytics from the web
LETTA_API_KEY=your-letta-api-key
# Optional overrides:
# LETTA_BASE_URL=https://api.letta.ai
# LETTA_AGENT_ID=agent-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Database Setup (Supabase)
Run the SQL in your Supabase SQL editor from your existing README to create the base tables. The app expects these tables/columns at runtime:
-
companies
- id (uuid, pk)
- name (text)
- created_at (timestamptz, default now)
-
ads
- id (uuid, pk)
- company_id (uuid, fk → companies.id)
- title (text)
- image_url (text, optional if video)
- video_url (text, optional)
- location (text, used by UI)
- likes (int, used by UI; code initializes a random value if not provided)
- created_at (timestamptz, default now)
-
prompts
- id (uuid, pk)
- ad_id (uuid, fk → ads.id)
- user_id (uuid or string; code auto-generates a stable browser id if not uuid)
- content (text)
- parent_id (uuid, nullable; threaded replies)
- edited_image_url (text, optional)
- edited_video_url (text, optional; if not present, the app falls back to saving video URLs in
edited_image_url) - created_at (timestamptz, default now)
Seed data:
- Use
supabase-test-data.sqlat repo root to insert Nike sample data.
Storage:
- Create a public bucket named
ads. The app writes under:images/andvideos/(uploads)edited/andedited-videos/(generated assets)
Installation & Running
cd frontend
pnpm install
pnpm dev
# open http://localhost:3000
Features
- Ad Upload: Image/video uploads saved to Supabase Storage and
adstable. - AI-Powered Remixing:
- Image edits with Gemini using your prompt + original image.
- Video generation with Vertex AI Veo from first/last frames and prompt.
- Prompt Analysis: Aggregates user prompts and analyzes with Claude.
- Analytics Dashboard: Letta agent returns brand analytics JSON for visualization. Letta deep memory and research analytics sourced from the web.
- Threads/Replies: Users can reply to prompts (
parent_id) to build remix chains. - Feed: Mix of mock ads and Supabase ads; supports likes, comments count, search, and deletion of user uploads.
Analysis
View
Metric
- 47
- 16
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- Google GeminiIn code
- Next.jsIn code
- OpenAIIn code
- ReactIn code
- SQLIn code
- SupabaseIn code
- Tailwind CSSIn code
- TypeScriptIn code
- JavaScriptClaimed
- PythonClaimed
9 of 11 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
457 KB
Source files
45
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
nidhigaonkar/calhacks25
81 files · 27.0 MB · @ 2625693
Structure
Interface
27 files · 33%Screens, components and styles rendered to the user.
API & routing
5 files · 6%Request entry points: routes, handlers and controllers.
Application logic
6 files · 7%Domain rules, services and shared utilities.
Data & schema
1 file · 1%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript60%
- YAML33%
- Markdown3%
- CSS3%
- SQL1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 61- @google/generative-ai
- @hookform/resolvers
- @letta-ai/letta-client
- @radix-ui/react-accordion
- @radix-ui/react-alert-dialog
- @radix-ui/react-aspect-ratio
- @radix-ui/react-avatar
- @radix-ui/react-checkbox
- @radix-ui/react-collapsible
- @radix-ui/react-context-menu
- @radix-ui/react-dialog
- @radix-ui/react-dropdown-menu
- @radix-ui/react-hover-card
- @radix-ui/react-label
- @radix-ui/react-menubar
- @radix-ui/react-navigation-menu
- @radix-ui/react-popover
- @radix-ui/react-progress
- +43 more
package.json
npm · 5- @letta-ai/letta-client
- @supabase/supabase-js
- dotenv
- exa-js
- openai
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Ad upload (image/video) to Supabase StorageVerified
Ad Upload: Image/video uploads saved to Supabase Storage and ads table
Claimed on readmehigh confidencefrontend/app/api/upload/route.ts:46— Uploads the file buffer to the 'ads' Supabase storage bucket and returns a public URLfrontend/components/upload-ad-modal.tsx:56— Upload modal posts FormData to /api/upload
AI image remixing via GeminiVerified
Users remix ads using Gemini-powered image editing with prompts and style presets
Claimed on readmehigh confidencefrontend/app/api/edit-image/route.ts:80— Calls gemini-2.5-flash-image:generateContent with the user prompt and source imagefrontend/components/remix-modal.tsx:30— Style preset list (original/modern/retro/bold/cinematic) sent to the edit-image API
AI video generation via Veo 3Verified
Video generation with Vertex AI Veo from first/last frames and prompt
Claimed on readmehigh confidencefrontend/app/api/edit-video/route.ts:60— Calls Vertex AI veo-3.1-generate-preview:predictLongRunning with first/last frame images and prompt, then polls for completion
Feed of real ads to scrollVerified
Users can scroll a feed of real ads (mix of mock and Supabase ads)
Claimed on readmehigh confidencefrontend/app/page.tsx:126— Feed combines Supabase-fetched ads with mockAds array and renders themfrontend/lib/supabase.ts:327— getAllAds queries the ads table joined with companies and prompts
Feed search across brand/caption/categoryVerified
Feed supports likes, comments count, search, and deletion of user uploads
Claimed on readmehigh confidencefrontend/app/page.tsx:76— filteredAds filters ads by brand, caption, and category against searchQueryfrontend/lib/supabase.ts:563— deleteAd removes the ad, its prompts, and its storage files
Letta Analytics DashboardVerified
Analytics page powered by Letta agent returning brand analytics JSON (sentiment, demographics, competitors)
Claimed on readmemedium confidencefrontend/app/api/letta-analytics/route.ts:57— Uses @letta-ai/letta-client to call client.agents.messages.create and parses the JSON analytics responsefrontend/app/brands/analytics-dashboard.tsx:296— lettaAnalytics.sentiment/demographics rendered in the dashboard, falling back to hardcoded defaults if absent
Prompt analysis via ClaudeVerified
Aggregates user prompts and analyzes with Claude for themes, tone, style references, intent
Claimed on readmehigh confidencefrontend/app/api/analyze-prompts/route.ts:45— Calls api.anthropic.com/v1/messages with claude-sonnet model and returns parsed JSON analysisfrontend/app/brands/analytics-dashboard.tsx:530— promptAnalysis.themes/emotionalTone/intent rendered directly from the API result
Analytics page with demographics and top aestheticsCode-supported
Analytics page shows what people want, including demographics, top aesthetics, and more
Claimed on Devpostmedium confidencefrontend/app/brands/analytics-dashboard.tsx:27— Large portions of the dashboard (performanceMetrics, topAds, engagementTrends, audienceInsights) are hardcoded mock objects rather than derived from live data, though sentiment/demographics do pull from the Letta response when present
Letta Deep Research Agents and Memory Blocks tracking remixed elements/viralityCode-supported
Letta's Deep Research Agents extract insights from every remix/interaction, with memory blocks tracking most-remixed elements and which remixes improve engagement/virality
Claimed on Devpostlow confidencefrontend/app/api/letta-analytics/route.ts:12— Calls a single pre-existing Letta agent (hardcoded agentId) with one canned analytics prompt; no code found that creates memory blocks, deep research jobs, or trains the agent on individual remix/interaction events
Likes, comments, and threaded replies on remixesCode-supported
Users share, earn likes, comments; threaded replies build remix chains via parent_id
Claimed on readmemedium confidencefrontend/lib/supabase.ts:44— savePrompt persists comments with parent_id for threadingfrontend/app/ad/[id]/page.tsx:206— prompt.parent_id used to build threaded comment levelsfrontend/app/ad/[id]/page.tsx:252— handleLike only toggles local component state (isLiked/likeCount); no Supabase update call found to persist a like to the ads table
Automatic company/brand labeling of uploaded images via GeminiClaimed only
Users upload an image and Gemini automatically labels/tags the company
Claimed on Devposthigh confidenceBrand-sponsored reward challengesClaimed only
Users win brand-sponsored rewards/prizes based on the remixes they make
Claimed on Devposthigh confidenceSignal Extraction for predicting ad performanceClaimed only
Model analyzes user behavior, commenting patterns, and performance metrics to extract signals (e.g. TikTok/Instagram mentions) and predict ad performance
Claimed on Devposthigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.