← Back to projects

Kreacorp

Browser-based sci-fi economic strategy game with trading, research, sabotage, and clans, installable as a cross-platform app.

Kreacorp

Kreacorp is a browser-based sci-fi economic empire: trading, research, sabotage, fleet combat, espionage, clans, and world events across around 44 dedicated domain services. Available as an installable PWA and, via Capacitor, also as a native Android/iOS app.

Gallery

Case Study

Situation

Kreacorp started as a solo project: a browser-based strategy game simulating a full economic empire, rather than repeating a narrow mechanic.

Challenge

A real production incident illustrates the challenge of real-time expectations on a polling design: Laravel’s default throttle key for authenticated requests doesn’t distinguish between routes — it counts per user across all roughly 24 throttled routes in a group. The 5-second poll against the central status endpoint was exhausting the checkout endpoint’s limit as a result — every payment attempt failed with a rate-limit error. The fix: a dedicated rate-limit bucket per route instead of a shared counter.

Approach

Laravel 13 with PHP 8.5 under Laravel Octane and RoadRunner, instead of the classic PHP-FPM request model. Frontend as a Vue 3.5 SPA with TypeScript, Vite, Pinia, and vue-i18n; PixiJS for the interactive map, Three.js for 3D elements. Auth via Sanctum, Fortify, and WebAuthn passkeys, payments via Cashier/Stripe, admin via Filament 5. Deliberately no WebSocket layer — a central tick endpoint bundles status, notifications, and messages.

Decisions

Polling instead of WebSockets

A central tick endpoint bundles status, notifications, and messages instead of a dedicated real-time connection.

Domain logic strictly in services

44 service classes instead of fat controllers; every economy mutation is required to run inside a database transaction.

Dedicated rate-limit bucket per route

Introduced after the incident described above, so status polling and checkout no longer share the same counter.

Self-hosting with Deployer instead of a PaaS

Deterministic, local deploy gates on its own infrastructure instead of hosted CI.

Mandatory i18n as a deploy gate

A custom audit script checks translation completeness for German, English, and Russian before every deploy.

My contribution

Complete game logic across 44 services, the data model with 116 migrations, the Filament admin, the Stripe payment integration, the deploy tooling, the i18n infrastructure for three languages, and production-grade hardening (rate limiting, worker memory budget).

Results

Scope
44 domain services, 116 migrations
Commits
373
Platforms
Web PWA as well as a native Android/iOS app via Capacitor

Search & navigation

Navigate Open Esc Close