Project Info
This project did not submit a demo video on Devpost.
Inspiration
Sometimes it's hard to find the right person to practice your presentation with. Maybe you're presenting to a grad class about distributed systems, or you're presenting in your anthropology class about a presentation you made at 4am and you have no idea of what you're saying, or maybe you're a startup presenting to an AI accelerator. In all of these situations -- it's quite hard to find someone who's an accurate representation of your audience member, and sometimes the feedback that people can give us doesn't really match what we need for preparation. After all, how can your dog ask you if Paxos is deployed in an asynchronous, partially synchronous, or synchronous model
What it does
Ducky.AI is a platform for you to upload, present, and persist your presentations. It's very simple. 1) Upload a presentation 2) Upload configurations like what you're presenting about, who you're presenting to, and what kind of tone you want the presentation to be -- is it casual? or is it as serious as talking to a C-level executive
How we built it
Front-End: Vite, Nginx Back-End: Deno, AWS S3/Lambda, RabbitMQ Databases: Redis, MongoDB Infra, Pulumi (IaC), Docker
Challenges we ran into
Integration + those pesky bugs that you can only test in a full run through of the pipeline
Accomplishments we're proud of
A completely working prototype.
What we learned
too much to write here
What's next
series A, real-time AI questions, posture and expression analysis
ducky.ai
CalHacks 2024
π Top 3 Project selected by The House Fund
What is ducky.ai?
ducky.ai is an AI-powered platform designed to help you practice presentations with precision feedback. Whether you're:
- A PhD student presenting deep-tech ideas on distributed systems to investors, or
- A college student rushing to finish your slides at 4 AM for a morning presentation
In all of these situations, it's hard to find someone who accurately represents your audience, and the feedback you get may not always align with your preparation needs. After all, how can your dog ask you if Paxos is deployed in an asynchronous, partially synchronous, or synchronous model?
ducky.ai offers the perfect feedback to prepare you for success.
What makes ducky.ai different?
β¨ Complete Context Understanding:
We analyze your entire presentationβincluding images, videos, and audioβfrom start to finish.
π€ Emotion and Confidence Analysis:
With Hume AI, we provide insights into your confidence level and perceived emotions during your presentation.
π‘ Advanced Feedback:
Get detailed, actionable feedback through GPT-4o, fine-tuned on your specific presentation content.
Why use ducky.ai?
- Personalized Practice: Simulates real-world presentation settings tailored to your needs.
- Accurate Insights: Beyond general feedback, ducky.ai captures nuances that typical practice partners miss.
- Holistic Support: Whether you're pitching to an AI accelerator or presenting in class, ducky.ai equips you with feedback you can trust.
Get ready to present with confidence and refine your delivery with feedback that truly matters!
Analysis
View
Metric
- 16
- 14
- 8
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
- HTMLIn code
- JavaScriptIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- RedisIn code
- TypeScriptIn code
- AWSClaimed
- DockerClaimed
- MongoDBClaimed
8 of 11 appear in the indexed code. 3 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
127 KB
Source files
38
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
adit-bala/ducky.ai
73 files Β· 16.6 MB Β· @ 4485e1c
Structure
Interface
24 files Β· 33%Screens, components and styles rendered to the user.
API & routing
11 files Β· 15%Request entry points: routes, handlers and controllers.
Application logic
11 files Β· 15%Domain rules, services and shared utilities.
Background jobs
3 files Β· 4%Work run outside a request: tasks, workers and schedules.
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
- TypeScript51%
- Python36%
- YAML5%
- Shell5%
- Markdown3%
- JavaScript1%
- Other (2)1%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
packages/client/package.json
npm Β· 22- @radix-ui/react-icons
- @radix-ui/themes
- @tanstack/react-query
- classnames
- pdfjs-dist
- react
- react-dom
- react-markdown
- react-router-dom
- +13 more
packages/workers/requirements.txt
pypi Β· 9- arize-phoenix
- deepgram-sdk
- hume
- openai
- openinference-instrumentation-openai
- pika
- pymongo
- python-dotenv
- redis
infra/requirements.txt
pypi Β· 7- pulumi
- pulumi-aws
- pulumi-cloudamqp
- pulumi-command
- pulumi-gcp
- python-dotenv
- requests
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
Asynchronous pipeline via RabbitMQ queues and background workersVerified
Built with RabbitMQ
Claimed on Devposthigh confidencepackages/workers/worker1.py:220β Worker1 consumes a first queue, processes transcription/emotion, then publishes to a second queuepackages/workers/worker2.py:320β Worker2 consumes the second queue and runs GPT feedback jobsdocker-compose.yml:78β worker1/worker2 services wired with RABBITMQ_URI, FIRST_QUEUE, SECOND_QUEUE env vars
Automatic transcription of spoken presentationVerified
Complete Context Understanding: we analyze your entire presentation including audio, from start to finish
Claimed on readmehigh confidencepackages/workers/worker1.py:133β get_transcript uses Deepgram (nova-2 model) to transcribe the uploaded audio clip
AWS S3/Lambda for storage and PDF/audio processing pipelineVerified
Built with amazon-web-services
Claimed on Devposthigh confidencepackages/api/app.ts:51β S3Client used to upload PDFs, video, and audioinfra/__main__.py:592β Pulumi defines two Lambda functions (pdf2image, audio2rabbitmq) triggered by S3 object creation events
Deno backendVerified
Built with deno
Claimed on Devposthigh confidencepackages/api/app.ts:1β Uses Deno-specific APIs: Deno.openKv, Deno.env, Deno-oak Application/Routerpackages/api/deno.json:1β Deno project config file present
Docker containerizationVerified
Built with docker
Claimed on Devposthigh confidencedocker-compose.yml:1β docker-compose defines nginx, client, api, mongodb, redis, worker1, worker2 services, each with a Dockerfile
Emotion and confidence analysis via Hume AIVerified
Emotion and Confidence Analysis: with Hume AI, we provide insights into your confidence level and perceived emotions
Claimed on readmehigh confidencepackages/workers/worker1.py:148β get_emotions calls HumeClient's prosody batch inference job and computes a confidence score from good/bad emotion averagespackages/client/src/app/Presentation/Feedback/index.tsx:32β Feedback UI renders emotion badges and the emotionScore (confidence score) from clip.feedback
Google OAuth login and user accountsVerified
implied platform requirement (per-user presentations); not explicitly stated in Devpost text but core to 'your presentations'
Claimed on readmehigh confidencepackages/api/app.ts:39β Google OAuth config, sign-in/callback routes, session cookie, and user creation in MongoDB
MongoDB for persistent presentation/user dataVerified
Built with MongoDB
Claimed on Devposthigh confidencepackages/api/models/schema.ts:27β Presentation/User/Clip/Feedback schema types used against a Mongo collectionpackages/api/app.ts:30β MongoClient connects and 'users' collection is used throughout app.ts
Nginx reverse proxyVerified
Built with nginx
Claimed on Devposthigh confidencepackages/nginx/default.conf:1β Nginx config existsdocker-compose.yml:2β nginx service builds from packages/nginx and depends on api/client
Persist presentations and feedback (view past sessions)Verified
Persist your presentations
Claimed on Devposthigh confidencepackages/api/app.ts:435β GET /presentations and GET /presentations/:uuid return stored presentation/clip data from MongoDBpackages/client/src/app/Presentations/index.tsx:36β Client lists persisted presentations via getPresentations query
Present and record clips (video/audio per slide)Verified
Upload, present, and persist your presentations
Claimed on Devposthigh confidencepackages/api/app.ts:567β POST /presentations/:uuid/clip accepts per-slide video and audio webm uploads and stores them in S3packages/client/src/app/Presentation/Menu/index.tsx:148β UI supports starting/stopping recording and stepping through slides
Pulumi infrastructure as codeVerified
Built with pulumi
Claimed on Devposthigh confidenceinfra/__main__.py:1β Full Pulumi program provisioning GCP VM, CloudAMQP, S3, IAM, Lambda resourcesinfra/Pulumi.yaml:1β Pulumi project manifest present
Redis for job/session stateVerified
Built with Redis
Claimed on Devposthigh confidencepackages/workers/worker1.py:45β Redis client used to store per-presentation thread_id, pending clips, and per-clip job datadocker-compose.yml:63β redis service defined with healthcheck and password
Upload presentation (PDF)Verified
Upload a presentation (PDF file)
Claimed on readmehigh confidencepackages/api/app.ts:196β POST /api/presentations parses multipart form data, validates PDF, uploads to S3packages/client/src/app/Presentations/index.tsx:48β Client file input restricted to application/pdf and calls createPresentation
Upload presentation configuration (topic, audience, tone)Verified
Upload configurations like what you're presenting about, who you're presenting to, and what tone you want
Claimed on Devposthigh confidencepackages/client/src/app/Presentations/index.tsx:30β Form collects description, audience, tone fields alongside the filepackages/api/app.ts:286β Server stores presentationDescription, audienceDescription, toneDescription in the presentation preset
Video/image/audio multimodal analysis (complete context understanding)Verified
We analyze your entire presentation, including images, videos, and audio, from start to finish
Claimed on readmehigh confidencepackages/workers/worker2.py:119β get_clip_feedback sends both the slide image (image_url) and transcript text to the assistant, combining visual and audio-derived contentpackages/workers/worker1.py:148β Audio is separately analyzed for emotion via Hume
Vite front-endVerified
Built with vite
Claimed on Devposthigh confidencepackages/client/vite.config.ts:1β Vite config file present for the client package
Advanced feedback via GPT-4o (assistant-generated critique per clip and final summary)Code-supported
Advanced Feedback: get detailed, actionable feedback through GPT-4o, fine-tuned on your specific presentation content
Claimed on readmemedium confidencepackages/workers/worker2.py:104β get_clip_feedback and get_final_summary use the OpenAI Assistants API (threads/runs) with slide image + transcript to generate feedback and a final score; model name (gpt-4o) isn't visible in this repo, it depends on the OpenAI ASSISTANT_ID configured externally
PDF to slide images conversionCode-supported
implied by upload/present flow (slides used during presentation)
Claimed on readmemedium confidenceinfra/__main__.py:368β Lambda function code (embedded as string) uses pdftoppm/poppler to convert uploaded PDFs to PNG slide images and upload them back to S3packages/api/app.ts:320β pollS3Status polls for a status_completed marker and then fetches slide images produced by that pipeline
Real-time AI questions, posture and expression analysis (future work)Claimed only
What's next for Ducky.AI: series A, real-time AI questions, posture and expression analysis
Claimed on Devposthigh confidenceTop 3 Project awarded by The House Fund at CalHacks 2024Blocked
Top 3 Project selected by The House Fund, CalHacks 2024
Claimed on readmelow 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.