-
Explore Exciting Levels!
-
View Level Details & Rules
-
Rule Explanation & Visualization (on Hover/Click)
-
Rule Explanation & Visualization (on Hover/Click)
-
In-Game view
-
Shooting the ball towards the goal
-
Build Custom Level using Level Builder
-
Build Custom Level using Level Builder
-
Buy New Trails Skins
-
Buy New Ball Skins (with special attributes)
-
Your In-Game Profile (stats)
-
Your Profile (Showing your overall progress)
-
Earn Prestigious Badges
-
Ranking Page (Per Level & Monthly Global Based)
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
- express.js
- hono
- tailwind
- three.js
- vite
Log in or sign up for Devpost to join the conversation.