Backend Engineering Projects
Every project below is a real backend problem teams hit in production - slow queries, race conditions, broken auth, leaking pools. Fix it in a live cloud workspace and it lands on your portfolio as a clickable proof point.
32 projects to build
Return the Correct HTTP Status CodeReturned 400 Bad Request for validation failures instead of 200 with an error body, so clients can branch on sRepair Broken API PaginationCorrected the OFFSET calculation ((page - 1) * limit) so page 1 returns the first 10 products instead of skippAdd CORS Middleware to an Express APIWrote Express middleware that adds Access-Control-* headers on every response and short-circuits preflight OPTAdd a Health Check Endpoint in GoAdded GET /health that pings the DB connection and returns 200 healthy or 503 unhealthy with status - load-balBuild a URL Shortener APIShipped a two-endpoint URL shortener - POST /shorten returns 201 + short code, GET /s/<code> 302-redirects to Add JWT Authentication to an APIImplemented JWT issuance on /auth/login and a middleware that protects /api/* routes, returning 401 for missinAdd a Rate Limiter to an APIBuilt a Redis-backed token-bucket rate limiter that allows 5 requests per minute per client and returns 429 wiCache a Hot Read Path With RedisWrapped the expensive product-detail query with a Redis cache-aside layer (30s TTL) and invalidated on PUT so Switch to Cursor-Based PaginationReplaced page+offset pagination with keyset cursor pagination - stable when rows are inserted mid-scroll, O(1)Tighten a Zod Validation Schema (TypeScript)Plugged the loose Zod schema on POST /api/orders that let through missing/wrong-typed fields and crashed the sProduce and Consume a Kafka TopicWired the producer.py + consumer.py against a local Redpanda broker - producer publishes 10 JSON-encoded orderDrain an AWS SQS Queue Without DuplicatesAdded the missing `delete_message` call so processed messages stop reappearing in the queue when their visibilGenerate an AWS S3 Presigned Upload URLSwitched the presigner from `get_object` to `put_object` and gave it a non-zero expiry so the client's PUT actHonor an Idempotency-Key Header on POSTAdded an Idempotency-Key cache (in-memory dict) - the second POST with the same key short-circuits to the firsSet an HTTP Client Timeout to Stop Cascading FailuresAdded an explicit `httpx.Timeout(connect=2, read=3)` to the outbound HTTP client so a hung downstream stops blUpload Images to AWS S3 via LambdaFilled in the Lambda handler so it base64-decodes the image from the event body and uploads it to the user-uplFix a JWT Auth Bug That Accepts Any TokenClosed the JWT bypass by switching from options=verify_signature=False to jwt.decode(token, SECRET, algorithmsResolve a Git Merge ConflictHand-resolved the `<<<<<<<` markers in main.py (kept the new TIMEOUT constant from the feature branch AND the Build a Webhook Delivery System With RetriesBuilt a webhook delivery queue with exponential backoff retries, persistent attempt log, and a status API for Fix the N+1 QueryReplaced the per-order user lookup with a single JOIN (or batched WHERE IN), reducing 101 queries to 2 and resStop a Double-Charge Race ConditionFixed the read-then-write race in /api/charge by wrapping the balance check + update in a transaction with SELInstrument an API With OpenTelemetryAdded OpenTelemetry instrumentation to the FastAPI service - automatic request spans, a custom span around theStream Tokens Over Server-Sent Events (SSE)Converted the blocking /api/generate endpoint into a streaming SSE response that emits each token as it lands Verify a Stripe Webhook Signature (HMAC)Plugged the Stripe-webhook endpoint that trusted any request body - now verifies the Stripe-Signature header HPlug a Go Goroutine LeakFixed /api/work in the Go service that spawned an unbounded goroutine per request - added context cancellationMigrate an Express Route to FastifyReplaced the slow Express handler with a Fastify route that uses schema-based serialization - request throughpFix a Node.js Memory LeakBounded the requests array in app.js to the most recent 100 entries (shift() when over the cap) so the API no Fan Out Events With AWS SNS and SQSReplaced the order service's two direct HTTP fan-outs with a single SNS publish that two SQS queues subscribe Add a NOT NULL Column With a Zero-Downtime BackfillShipped a three-step zero-downtime migration to add a NOT NULL `customer_segment` column to the orders table -Refactor Globals Into Dependency InjectionTurned three global singletons (DB pool, email client, clock) into FastAPI dependencies - handlers now take thDesign a URL Shortener (System Design)Picked base62 of the SQLite row id, implemented `POST /shorten`, `GET /<code>` (302 redirect + click counter),Design a Rate Limiter (Token Bucket)Picked token-bucket (capacity 10, refill 10/sec) and implemented `allow(client_id)` as a per-client bucket dic
Plus 31+ more Backend projects in the workspace, with new ones added regularly.
More for Backend engineers
Build your Backend portfolio free. Fix real systems in a live cloud workspace - every fix is yours to keep.
Start free →