From the creator of Flappy Bird. Now building the future of AI-powered game creation.
Contract Address: AfvuTpZXLEkQ6CFG1kdw9Wx7wfCdTnVHhniUbxtDBAGS
DOTGEARS is my software development company, headquartered in Hanoi. We have shipped multiple titles since Flappy Bird -- every one following the same design philosophy: light-hearted, easy to understand, kid-friendly, extremely difficult, and incredibly fun.
The games were never about scale. They were about craft. Small team, tight feedback loops, and an obsessive attention to the feel of a single tap.
DOTGEARS
16th Floor, Daeha Business Center
360 Kim Ma Street, Giang Vo Ward, Hanoi, Vietnam
Representative: Nguyen Ha Dong
Contact: contact@dotgears.com
Web: dotgears.com
The same instinct that made Flappy Bird work -- that a game should be understandable in one second and playable forever -- now applies to how games are made.
I am building an AI-powered creation platform. The idea is radical in its simplicity: describe a game in plain language, and the system builds it. Not a prototype. Not a wireframe. A playable, shippable game with physics, rendering, audio, and input handling.
The generation engine is written in Rust. Prompts compile into optimized bytecode that runs natively on iOS, Android, and web. No dependencies. No runtime. Just a binary that plays.
/// Prompt-to-game compilation pipeline
pub struct GameCompiler {
parser: PromptParser,
planner: MechanicPlanner,
codegen: BytecodeEmitter,
renderer: RenderGraph,
physics: PhysicsConfig,
}
impl GameCompiler {
/// Takes a natural language description and produces a shippable game binary.
/// The pipeline is deterministic -- same prompt, same output, every time.
pub fn compile(&self, prompt: &str) -> Result<GameBinary, CompileError> {
let intent = self.parser.extract_intent(prompt)?;
let mechanics = self.planner.resolve_mechanics(&intent)?;
let bytecode = self.codegen.emit(&mechanics, &self.physics)?;
let render_bindings = self.renderer.bind(&mechanics)?;
Ok(GameBinary {
bytecode,
render_bindings,
metadata: intent.metadata(),
})
}
}The entity-component system handles everything a generated game needs. Collision detection, sprite animation, audio mixing, input routing, score tracking -- all resolved at compile time, not runtime.
/// Every game entity is a composition of components.
/// No inheritance. No virtual dispatch. Just data.
pub struct Entity {
pub id: u64,
pub position: Vec2,
pub velocity: Vec2,
pub sprite: SpriteHandle,
pub collider: ColliderShape,
pub behavior: BehaviorTree,
}
/// Fixed 60Hz physics step. Decoupled from render framerate.
/// Gravity, boundary clamping, and bounce are handled here.
pub fn physics_step(world: &mut World, dt: f32) {
for entity in world.entities.iter_mut() {
entity.velocity += world.gravity * dt;
entity.position += entity.velocity * dt;
if entity.position.y <= 0.0 || entity.position.y >= WORLD_HEIGHT {
entity.velocity.y *= -BOUNCE_DAMPING;
entity.position.y = entity.position.y.clamp(0.0, WORLD_HEIGHT);
}
}
// Broad-phase collision sweep
world.collision_grid.rebuild(&world.entities);
for (a, b) in world.collision_grid.candidate_pairs() {
if intersects(&world.entities[a].collider, &world.entities[b].collider) {
world.event_queue.push(CollisionEvent { a, b });
}
}
}$GEARS exists to fund my entry into the Bags.fm hackathon -- bringing AI-powered game creation to the Bags ecosystem. A creator economy where anyone can build, publish, and monetize games from natural language.
I proved a three-day game can become the most downloaded app on Earth. Now I want to give everyone else the tools to do the same.
Trade $GEARS on bags.fm/$dongatory.
| @dongatory | |
| Company | DOTGEARS |
| Nguyen Ha Dong | |
| Bags | bags.fm/$dongatory |
| contact@dotgears.com | |
| Location | Hanoi, Vietnam |
DOTGEARS -- Hanoi, Vietnam
Building the future of AI-powered game creation.








.png)