CurveBall: 3D Penalty & Free-Kick Soccer on Reddit

Score impossible curved goals, design mind-bending custom levels, customize your soccer ball, and climb the Reddit-native leaderboards!


Inspiration

With the excitement of the FIFA season uniting millions of football fans across subreddits, we wanted to build CurveBall—the first immersive, fully 3D penalty and free-kick game running directly inside a Reddit custom post feed. CurveBall brings stadium-level physics, an interactive goalkeeper, a creative 3D sandbox Level Builder, and a complete cosmetic economy straight to the Reddit community.


What it does

CurveBall lets players step up on the football field right inside their Reddit feed. Using intuitive drag and power adjustments, players can shoot, loft, and spin the ball past obstacles and the goalkeeper.

1. Shooting Mode

  • Ball Shoot Mode:
    • Flat: Shoots the ball flat and fast.
    • Loft: A normal kick with comparatively slower speed and an arcing flight.
  • Shooting Speed: Ranges from 10% (super slow) to 100% maximum speed, relative to the ball shoot mode selected.
  • Shoot Direction Indicator: Drag from the ball upward and a dotted white line appears, letting shooters line up the ball's shooting direction before committing.
  • Curve Mid Flight: Swipe left, right, or down to change the ball's trajectory mid-flight.
  • A Goalkeeper Who Fights Back: Ground dives, full-stretch saves, jumps, and arm extensions, all reacting live to exactly how and where you strike the ball.

2. Creative Level Builder Mode

Design anything from a gentle warm-up to an absolute nightmare gauntlet, no coding required.

  • Dynamic Obstacles: Drop in 10+ obstacle types and set their position, rotation, and even patrol movement.
  • Custom Start Position: Place the ball anywhere up to 36m out, at any angle.
  • Custom Match Rules: Toggle ball drag, direct-shot-only scoring, goalkeeper on/off, and ball spin, then set the ball's starting distance and angle, shot counts, point thresholds, and corner-multiplier targets.
  • Instant Auto-Preview: Every level generates its own thumbnail automatically, so your Reddit post always looks sharp.

3. Social Features

  • User-Generated Content & Daily Challenges: Let redditors unleash their creativity by building near-impossible, monstrous, and hilarious levels. Plus, take on a brand-new Daily Challenge every day.
  • Comments & Achievement Sharing: Comment after beating (or getting absolutely destroyed by) a level to help other players. Unlocked a new skin, trail, or badge? Flex it in the comments for the world to see.
  • A Profile That Follows You: Your lifetime stats, unlocked achievements, and glorious victories (or embarrassing misses), all tied to your Reddit identity wherever you play.

Game Catalogs & Reference

1. Match Rules & Mechanics

Rule / Mechanic Description
Ball Drag Drag left/right/down mid-flight to reshape your shot's trajectory.
Direct Shot Only Goals only count on a clean strike, no bounces allowed.
Goalkeeper Active Toggle the dynamic goalkeeper on or off.
Ball Spin Adds natural lateral curve during flight.
Corner Points Target zones in the net's 5 corners, each with custom point values.

2. Obstacles Catalog

  • Defender Dummy: Standing tall to block your shot path.
  • Steel Barricade: Low and heavy, built to stop grounded shots.
  • Wooden Box: Stackable, lane-blocking crates.
  • Brick Wall: A wide horizontal blocker.
  • Road Barricades (Red/White/Checkered): Forces you into curved loft shots.
  • Steel Fence Grid: Tall and grid-based, shuts down high shots.
  • Metal Pole: Narrow verticals that punish sloppy aim.
  • Double Blocker: An extra-wide barrier with wing blocks.

3. Soccer Ball Skins

Skin Name Rarity Price (Gold) Unique Attributes & Perks
Default Common Free The standard tournament ball, pure and reliable.
Skin B1 Common 500 +10% gold bonus on all earnings.
Skin B2 Common 500 +10% gold bonus on all earnings.
Skin B3 Rare 1000 +5 points per shot and +10% gold.
Skin B5 Rare 1500 +20% gold and +10 points per shot.
Skin B4 Epic 2000 +40% gold and +15 points per shot.
Skin B6 Epic 3000 +1 extra shot, +40% gold, +20 points per shot.
Skin B7 Legendary 4000 +2 extra shots, +80% gold, +50 points per shot.
Skin B8 Legendary 4000 +2 extra shots, +80% gold, +50 points per shot.

4. Flight Trails

Trail Name Rarity Price (Gold) Style Effect Description
Default White Common Free Ribbon A clean, elegant white tracing ribbon.
Neon Cyber Rare 1000 Ribbon High-voltage glowing cyan and magenta ribbon.
Rainbow Road Rare 1500 Ribbon A beautiful multi-colored pride ribbon.
Magma Flame Epic 2000 Particles Drifting volcanic fireballs trail the ball.
Twinkling Stars Epic 2000 Particles Sparkling golden stars that twinkle and dissolve.
Voxel Grid Legendary 2000 Meshes Retro rotating 3D blocks that scale down.

5. Earnable Badges

Badge Description Unlock Requirement
Daily Champion 1st Place Daily Finish 1st on the Daily Leaderboard.
Daily Runner-up 2nd Place Daily Finish 2nd on the Daily Leaderboard.
Daily Third 3rd Place Daily Finish 3rd on the Daily Leaderboard.
Daily Challenger Top 50 Daily Finish in the Top 50 on the Daily Leaderboard.
Elite Monthly Scorer Top 1% Scorer Finish the month in the Top 1% of Scorers.
Star Monthly Scorer Top 5% Scorer Finish the month in the Top 5% of Scorers.
Pro Monthly Scorer Top 10% Scorer Finish the month in the Top 10% of Scorers.
Elite Monthly Builder Top 1% Builder Finish the month in the Top 1% of Builders.
Star Monthly Builder Top 5% Builder Finish the month in the Top 5% of Builders.
Pro Monthly Builder Top 10% Builder Finish the month in the Top 10% of Builders.

Tech Stack

CurveBall is built on a modern, ultra-performant stack designed for cellular loading and low latency:

  • Core & Frontend: React 19, Tailwind CSS 4, Vite, React Router.
  • 3D Engine: Three.js (WebGL rendering) with optimized low-poly custom meshes.
  • Backend: Node.js v22 serverless environment, Honō framework, tRPC.
  • Persistence & Database: Redis (used for player profiles, level indexing, custom posts, and leaderboards).
  • Trigger System: Automatic creation of community gameplay posts upon app installation.

Challenges we ran into

  • Lightweight 3D Physics Engine: Implementing a 3D ball trajectory, spin, drag, and collision calculations without importing bloated physics libraries that would slow down iFrame loads.
  • Low-Latency Cellular Optimization: Minimizing mesh, texture, and animation sizes to ensure the game loads instantly (in under 1 second) even on standard cellular data.
  • Goalkeeper Animation Mapping: Programmatically calculating the exact interception point of the ball relative to the goalkeeper, and mapping it to the corresponding animations seamlessly in real time.
  • Exploit Prevention: Securing backend API endpoints so players cannot forge win requests or repeat the same custom level endlessly for infinite gold.

Accomplishments that we're proud of

  • Flawless 3D inside Reddit: Built an engaging, interactive 3D WebGL game that fits perfectly within Reddit's custom post feed sandbox.
  • Advanced 3D Sandbox Creator: Designed a flexible, slider-and-drag-based 3D level editor that requires zero technical knowledge to use.
  • Unified Social System: Enabled seamless custom post submission, global monthly scoring leaderboards, and builder rankings that keep subreddits competitive.

What we learned

  • Techniques for optimizing Three.js render loops, vertex counts, and textures for embedded WebViews.
  • How to leverage server-side Redis hash sets and sorted sets on Reddit's Devvit platform for robust leaderboards.
  • How to structure clean tRPC routes inside serverless Hono microservices.

What's Next for CurveBall

  • More obstacles and stadium skins are on the way, giving players even more ways to create chaotic, impossible, and ridiculously fun levels.
  • A Reddit Cup club tournament every 6 months, where players create their own clubs and battle through the competition on the road to absolute glory. Only one club will lift the Reddit Cup.

Built With

Share this project:

Updates