Project Info
FLEX [Freelancing Linking Expertise Xchange]
Inspiration
Freelancers deserve a platform where they can fully showcase their skills, without worrying about high fees or delayed payments. Companies need fast, reliable access to talent with specific expertise to complete jobs efficiently. "FLEX" bridges the gap, enabling recruiters to instantly find top candidates through AI-powered conversations, ensuring the right fit, right away.
What it does
Clients talk to our AI, explaining the type of candidate they need and any specific skills they're looking for. As they speak, the AI highlights important keywords and asks any more factors that they would need with the candidate. This data is then analyzed and parsed through our vast database of Freelancers or the best matching candidates. The AI then talks back to the recruiter, showing the top candidates based on the recruiter’s requirements. Once the recruiter picks the right candidate, they can create a smart contract that’s securely stored and managed on the blockchain for transparent payments and agreements.
How we built it
We built starting with the Frontend using Next.JS, and deployed the entire application on Terraform for seamless scalability. For voice interaction, we integrated Deepgram to generate human-like voice and process recruiter inputs, which are then handled by Fetch.ai's agents. These agents work in tandem: one agent interacts with Flask to analyze keywords from the recruiter's speech, another queries the SingleStore database, and the third handles communication with Deepgram. Using SingleStore's real-time data analysis and Full-Text Search, we find the best candidates based on factors provided by the client. For secure transactions, we utilized SUI blockchain, creating an agreement object once the recruiter posts a job. When a freelancer is selected and both parties reach an agreement, the object gets updated, and escrowed funds are released upon task completion—all through Smart Contracts developed in Move. We also used Flask and Express.js to manage backend and routing efficiently.
Challenges we ran into
We faced challenges integrating Fetch.ai agents for the first time, particularly with getting smooth communication between them. Learning Move for SUI and connecting smart contracts with the frontend also proved tricky. Setting up reliable Speech to Text was tough, as we struggled to control when voice input should stop. Despite these hurdles, we persevered and successfully developed this full stack application.
Accomplishments we're proud of
We’re proud to have built a fully finished application while learning and implementing new technologies here at CalHacks. Successfully integrating blockchain and AI into a cohesive solution was a major achievement, especially given how cutting-edge both are. It’s exciting to create something that leverages the potential of these rapidly emerging technologies.
What we learned
We learned how to work with a range of new technologies, including SUI for blockchain transactions, Fetch.ai for agent communication, and SingleStore for real-time data analysis. We also gained experience with Deepgram for voice AI integration.
What's next
Next, we plan to implement DAOs for conflict resolution, allowing decentralized governance to handle disputes between freelancers and clients. We also aim to launch on the SUI mainnet and conduct thorough testing to ensure scalability and performance.
FLEX [Freelancing Linking Expertise Xchange]
https://devpost.com/software/flex-se8mtf?ref_content=user-portfolio&ref_feature=in_progress
Analysis
View
Metric
- 17
- 14
- 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
- CIn code
- CSSIn code
- ExpressIn code
- JavaScriptIn code
- Next.jsIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- FlaskClaimed
9 of 10 appear in the indexed code. 1 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
22 MB
Source files
2,598
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
DPulavarthy/CalHacks
3,336 files · 56.6 MB · @ 95acbdb
Structure
Interface
29 files · 1%Screens, components and styles rendered to the user.
API & routing
83 files · 2%Request entry points: routes, handlers and controllers.
Application logic
2,987 files · 90%Domain rules, services and shared utilities.
+3 moreData & schema
38 files · 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
- Python99%
- TypeScript0%
- C0%
- Markdown0%
- CSS0%
- JavaScript0%
- Other (2)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm · 32- @mysten/dapp-kit
- @mysten/enoki
- @mysten/sui
- @radix-ui/react-avatar
- @radix-ui/react-label
- @radix-ui/react-popover
- @radix-ui/react-slot
- @tanstack/react-query
- @vercel/analytics
- axios
- class-variance-authority
- clsx
- jwt-decode
- lucide-react
- next
- next-themes
- react
- react-dom
- +14 more
package.json
npm · 5- @deepgram/sdk
- cors
- dotenv
- express
- zod
backend/evi-env/requirements.txt
pypi · 3- asyncio
- hume
- python-dotenv
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
Agreement update when freelancer selectedVerified
When a freelancer is selected and both parties reach an agreement, the object gets updated
Claimed on readmehigh confidencefrontend/move/agreement/sources/agreement.move:36— claim() entry function updates the freelancer field on the shared Agreement objectfrontend/hooks/useClaimTransaction.ts:16— Frontend hook calls the agreement::claim move function with the object id and recipient address
AI talks back to recruiter with voice outputVerified
The AI then talks back to the recruiter, showing the top candidates
Claimed on readmehigh confidencebackend/output.js:51— Uses Deepgram speak.request TTS to synthesize a spoken summary of matched candidates, saved as output.wav and played in the UIfrontend/components/Jobs.tsx:50— Frontend fetches and plays http://localhost:8000/output.wav
AI-powered candidate matching via database searchVerified
This data is then analyzed and parsed through our vast database of Freelancers for the best matching candidates
Claimed on readmehigh confidencebackend/index.py:19— Runs a SingleStore full-text MATCH AGAINST query over the Freelancer table using extracted skill keywordsbackend/output.js:12— Express endpoint /exec/:list writes keywords, invokes python index.py, and returns freelancers.json to the frontend
Escrowed funds released upon task completion via smart contractVerified
escrowed funds are released upon task completion, all through Smart Contracts developed in Move
Claimed on readmehigh confidencefrontend/move/agreement/sources/agreement.move:58— settle() entry function transfers the escrowed Balance<SUI> to the freelancer on success or back to the recruiter on failurefrontend/hooks/useSettleTransaction.ts:19— Frontend hook invokes agreement::settle with the success flag and object id
Express.js backend routingVerified
We also used Flask and Express.js to manage backend and routing efficiently
Claimed on readmehigh confidencebackend/output.js:9— An Express app is instantiated with routes /exec/:list and /audio, and listens on port 8000
Next.js frontendVerified
We built starting with the Frontend using Next.JS
Claimed on readmehigh confidencefrontend/next.config.mjs— Next.js config file presentfrontend/app/page.tsx— App Router page structure present under frontend/app
SingleStore database with Full-Text SearchVerified
Using SingleStore's real-time data analysis and Full-Text Search, we find the best candidates
Claimed on readmehigh confidencebackend/index.py:2— Connects via singlestoredb SDK and issues a MATCH(TABLE ...) AGAINST full-text query
Smart contract / agreement object on SUI blockchain via MoveVerified
For secure transactions, we utilized SUI blockchain, creating an agreement object once the recruiter posts a job... via Smart Contracts developed in Move
Claimed on readmehigh confidencefrontend/move/agreement/sources/agreement.move:11— Defines an Agreement struct with freelancer, recruiter, balance, status fieldsfrontend/move/agreement/sources/agreement.move:41— create() entry function converts a Coin<SUI> to a Balance and shares an Agreement object on-chain
Voice input capture in browserVerified
Clients talk to our AI, explaining the type of candidate they need
Claimed on readmehigh confidencefrontend/components/Speech.tsx:53— Uses browser webkitSpeechRecognition to capture and transcribe recruiter speech
Deepgram voice AI integrationCode-supported
We integrated Deepgram to generate human-like voice and process recruiter inputs
Claimed on readmemedium confidencebackend/output.js:2— Deepgram SDK is used for text-to-speech generation; no evidence Deepgram is used for recruiter speech-to-text input, which instead relies on browser webkitSpeechRecognition (frontend/components/Speech.tsx)
End-to-end wiring of recruiter/freelancer addresses in agreement creationCode-supported
Once the recruiter picks the right candidate, they can create a smart contract that's securely stored and managed on the blockchain
Claimed on Devpostmedium confidencefrontend/hooks/useCreateAgreementTransaction.ts:16— Recruiter/freelancer addresses are hardcoded placeholders with a code comment 'how do i get recruiter address and amount from the frontend?', indicating candidate selection is not actually wired to contract creation
Fetch.ai uAgents scaffoldingCode-supported
handled by Fetch.ai's agents
Claimed on Devposthigh confidencebackend/evi-env/agents/sui.py:4— uagents.Agent instances are defined (sui, hume, singlestore, singlestoreHumeSync, frontBackSync) but each only logs a startup greetingbackend/evi-env/agents/frontBackSync.py:44— No ctx.send/on_message handlers found anywhere in the agents directory, so no actual inter-agent messaging/coordination is implemented despite Agent objects existing
Keyword highlighting from speechCode-supported
As they speak, the AI highlights important keywords
Claimed on readmemedium confidencefrontend/components/Speech.tsx:54— Transcript words are bolded via a hardcoded client-side keyword list match, not an AI/NLP model as implied by the claim
Terraform deployment for scalabilityCode-supported
we deployed the entire application on Terraform for seamless scalability
Claimed on readmemedium confidenceconfig.tf:7— Terraform config exists defining an S3 bucket, versioning, and a CloudFront distribution for static hosting, but contains placeholder values (e.g. generic OAI id) suggesting it was not a fully deployed/verified pipeline
DAO-based conflict resolutionClaimed only
Next, we plan to implement DAOs for conflict resolution
Claimed on readmehigh confidenceFetch.ai agents handling voice/keyword/database/communication in tandemClaimed only
These agents work in tandem: one agent interacts with Flask to analyze keywords, another queries SingleStore, a third handles communication with Deepgram
Claimed on readmehigh confidenceFlask backend for keyword analysisClaimed only
We also used Flask and Express.js to manage backend and routing efficiently
Claimed on readmehigh confidenceSUI mainnet launchClaimed only
We also aim to launch on the SUI mainnet
Claimed on readmehigh 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.