Inspiration

Every year, millions of young creatives — student filmmakers, bedroom musicians, aspiring designers — hit the same wall: they have incredible talent but zero budget. A high schooler who can edit stunning videos needs album art for their project, while another student across town who can illustrate needs someone to edit their short film. The skills exist. The demand exists. But without money, the connection never happens.

We kept seeing this pattern in our own lives and in creative communities around us. Freelance platforms like Fiverr and Upwork require payment. Most teenagers can't even open a PayPal account. And the ones who can often can't afford $50 for a logo or $200 for a website.

The question that sparked Nuvra was simple: what if your skill was your currency?

We were also inspired by the mathematical elegance of barter networks. In economics, the "double coincidence of wants" problem — where person A needs what B has and B needs what A has — is the classic failure mode of barter systems. But when you model the problem as a directed graph with $n$ participants, the solution space expands dramatically. A cycle of length $k$ in a skill graph means $k$ people can all get what they need simultaneously, even if no two of them could trade directly. We wanted to build that.

What it does

Nuvra is a full-stack hyperlocal skill bartering platform that lets creatives trade skills and resources without money.

Core features:

  • AI Portfolio Scanner — Paste a GitHub, Behance, or SoundCloud link and Claude analyzes your work, auto-detecting skills with proficiency ratings on a 1–10 scale
  • Smart Match Scoring — AI evaluates compatibility between project needs and user skills, ranking potential collaborators
  • Circular Barter Chains — A graph algorithm powered by AI fuzzy matching discovers multi-party exchange loops (A gives to B, B gives to C, C gives back to A), even when skill names don't match exactly — "2D Animation" will still connect to someone wanting "Animation" with a proportional confidence score
  • Trade Credits — When exchanges aren't perfectly equal, credits bridge the gap with full negotiation support: propose, counter-offer (including flipping payment direction), accept, or reject
  • Real-Time Messaging — Socket.IO powered chat between matched collaborators
  • Reputation System — Star ratings with written reviews, rating distribution charts, and review history for both parties
  • Community Impact Map — A public interactive map (dark CARTO tiles) showing opted-in creatives worldwide, with clickable pins showing skills, ratings, and direct message buttons. Accompanied by live platform stats: total trades, skills shared, and estimated dollar value exchanged without money changing hands

How we built it

Nuvra runs on three separate services:

Frontend — Next.js 14 with TypeScript and Tailwind CSS, deployed on Vercel. We went with a dark editorial aesthetic: near-black backgrounds (stone-900/950), warm amber accents, Instrument Serif display type, and DM Sans body text. A global IntersectionObserver drives scroll-triggered reveal animations (fade-up, slide, stagger, scale) across every page. Premium hover effects include card lift with deep shadows, an amber light-sweep on hover, and tactile button press feedback.

Backend — Express.js with TypeScript and Prisma 7 ORM connected to a Supabase PostgreSQL database (with PostGIS for geospatial queries), deployed on Render. Prisma 7 required a custom adapter setup with @prisma/adapter-pg since the new version dropped the url field from the datasource block.

AI Service — A Python FastAPI microservice using the Anthropic Claude API, also on Render. It powers five AI features: text analysis, portfolio scanning, match scoring, recommendations, and the fuzzy circular barter algorithm. The circular barter system works in two phases:

  1. AI Similarity Matrix — All unique skills are sent to Claude, which returns a similarity score for every $(has_i, want_j)$ pair. This means "Illustration" can partially fulfill "Graphic Design" at $s = 0.6$ instead of being treated as unrelated.

  2. Weighted DFS Cycle Detection — We build a directed graph $G = (V, E)$ where each user is a vertex and edge weight $w(u, v)$ is the best similarity score between $u$'s skills and $v$'s wants. DFS finds all simple cycles of length $3 \leq k \leq 5$. Each cycle's confidence is:

$$C = \left(\frac{1}{k}\sum_{i=1}^{k} s_i\right) \times 100 \times \max(1 - 0.05(k-3),\ 0.7)$$

where $s_i$ is the similarity score of edge $i$ and the second factor penalizes longer chains slightly.

Community Map — Leaflet.js with react-leaflet, using CARTO dark tiles. Custom divIcon markers are color-coded by creative specialty (pink for visual arts, purple for music, cyan for writing, etc.). The map auto-fits bounds to show all visible users, and popups include profile previews with action buttons.

Challenges we ran into

Prisma 7 breaking changes were the biggest early blocker. Prisma 7 completely changed how database connections work — removing url and directUrl from the schema file and requiring a separate prisma.config.ts with defineConfig. The @prisma/adapter-pg package is now mandatory. On top of that, ts-node-dev couldn't resolve Prisma 7's subpath imports (#main-entry-point), so we had to switch to tsx watch.

The circular barter "same skill" bug — Our first DFS implementation accidentally assigned the same skill to both the giver and receiver at each edge, because the path initialization duplicated the starting edge's skill name. Tracing through a 3-person cycle on paper revealed the issue.

Render deployment was tricky — Python version had to be set via environment variable (PYTHON_VERSION=3.11.11), not a .python-version file. CORS broke because the frontend URL had a trailing slash. JWT's expiresIn needed a type cast.

Leaflet SSR crash — Leaflet uses window internally, which doesn't exist during Next.js server-side rendering. We had to use next/dynamic with { ssr: false } and fix the default marker icon paths that Webpack breaks.

Accomplishments that we're proud of

  • The AI fuzzy matching genuinely works. Seeing "Motion Graphics" automatically connect to someone who wants "Animation" — without us hard-coding any synonym lists — felt like a breakthrough moment.
  • The circular barter algorithm finding 3-5 person exchange loops in real-time, visualized as chain diagrams with confidence scores, is something we haven't seen on any existing platform.
  • The credit negotiation system with back-and-forth counter-offers and direction flipping (either party can propose paying the other) solves the real-world problem of unequal trades elegantly.
  • The community impact map being fully public (no login required) means hackathon judges can immediately see the platform's reach and activity without creating an account.
  • The dark editorial design — we invested heavily in making the UI feel premium rather than generic. Film grain overlays, scroll-triggered stagger animations, ambient glow effects, and careful typography create an experience that feels intentionally designed for creatives.

What we learned

  • Graph theory has real applications beyond textbooks. Modeling a barter network as a directed graph and finding cycles turned an economic impossibility (the double coincidence of wants) into a solvable computer science problem.
  • AI as a "fuzzy layer" over algorithms is incredibly powerful. The graph algorithm is deterministic and fast, but it's the AI similarity scoring that makes it useful in the real world where people don't use the same vocabulary for the same skills.
  • Prisma 7 is a major migration. The shift from connection strings in the schema to adapter-based configuration is a fundamental architecture change, and the documentation is still catching up.
  • Dark themes are harder than they look. Converting 16 pages from light to dark isn't just swapping white for black — every status badge color, every subtle border, every hover state needs rethinking for contrast and readability.
  • Building for teenagers means building without payment infrastructure. This constraint forced us to design the credit system and circular barter chains — features that make the platform more interesting than a simple marketplace would have been.

What's next for Nuvra

  • Mobile app — React Native version for on-the-go skill trading, with push notifications for match proposals and credit offers
  • AI-generated trade suggestions — Claude proactively suggesting trades based on your portfolio and what's in demand near you: "You have video editing skills and 3 people within 5 miles need video editors this week"
  • Skill verification — AI-powered portfolio review that verifies claimed skill levels by analyzing actual work samples, making the reputation system more trustworthy
  • Group barter rooms — Real-time collaborative spaces where 3+ people can negotiate a circular trade together with shared chat, screen sharing, and live credit settlement
  • School and community partnerships — Partnering with high schools and community centers to onboard creative programs, turning Nuvra into the default platform for student collaboration

Built With

Share this project:

Updates