All projects

Case study

ulogo.it

ulogo.it is a production logo cleanup and generation app built around one job: turn a rough logo source or prompt into a practical web-ready brand pack.

Shipped 2 minute read 15 technologies
Next.jsTypeScriptReactPostgreSQLDrizzleBullMQValkeyCloudflare R2DokployGHCRGoogle OAuthPolarGeminiOpenAIQuiver AI

The product opens directly on the workspace. Users can upload an existing logo or generate a new draft, run a cleanup job, and review a before/after pack with the useful outputs: clean PNG, SVG when vectorization is strong enough, a mark, favicon assets, Open Graph preview, install snippets, and a ZIP.

Product model

The app is intentionally credit-based instead of subscription-first. Anonymous visitors can try 2 cleanups and 1 generated draft. Signed-in users get 10 starter credits, saved project history, and prepaid top-ups through Polar. Cleanup costs 1 credit and generated drafts cost 4 credits.

Google OAuth is the only account path, which keeps auth simpler and leaves recovery and MFA to Google. The app owns sessions, credits, project history, developer API keys, and billing events.

Processing system

The web app creates projects and queues work. A separate worker handles the expensive image pipeline through BullMQ and Valkey. The pipeline stores source material, normalizes uploads or generated drafts, removes background friction, renders logo and mark outputs, builds favicon assets, creates Open Graph previews, and packages the final archive.

Generation supports Gemini and OpenAI image lanes. Vector output uses provider-backed vectorization when available with local fallback for simple marks. Optional asset degradation is explicit, so a pack can still ship useful PNG outputs even when SVG generation is not good enough.

Developer and production work

ulogo.it also ships a developer API and CLI path. The API covers cleanup, generation, project status, asset listing, downloads, edit revisions, batch manifests, and webhooks. API keys support scopes, optional IP allowlists, idempotency keys, request IDs, rate-limit headers, and application/problem+json errors.

Production runs on Dokploy as separate web and worker services from GHCR images. Postgres and Valkey are managed services. Cloudflare handles DNS, public TLS, WAF/rate limits, Turnstile, and R2 object storage. A bootstrap script provisions the repeatable production pieces, including Polar products, webhooks, runtime env, R2, DNS, and migrations.