2021 — Present
Still Discount
A course-discovery platform connecting learners with free Udemy coupons, backed by a dedicated API and automated publishing scheduler.
FocusFull-stack development & automation
StatusLive product

- Active users
- 270K
- New users
- 268K
- New users from organic social
- 146K
Google Analytics 4 · 1 Dec 2021–31 Mar 2026 · Rounded values shown in the supplied acquisition report.
Overview
Still Discount combines a Next.js frontend, a TypeScript/Express API and a separate scheduled-job service. The product covers course search, filtering, discovery and distribution, while background jobs import offers and prepare content for publishing. The supplied GA4 acquisition report shows 270K active users over December 2021 through March 2026.
The problem
Course coupons expire quickly. Keeping a discoverable catalogue and distributing fresh offers requires more than a manually updated listing.
Implementation
- Built a Next.js discovery experience with course filtering, search, account flows and paginated content.
- Implemented a TypeScript/Express API with validated requests, authentication, operation-specific rate limits and MySQL-backed course data.
- Separated scheduled course imports, poster generation, webhooks and Telegram publishing into a dedicated node-cron service.
- Added shared infrastructure for Redis caching and ClickHouse, alongside job execution logs and health-check routines.
Outcome & status
GA4 reports 270K active users and 268K new users for 1 December 2021–31 March 2026. The previously supplied résumé separately reports 185,000+ learners enrolled for free; the analytics screenshot measures traffic, not enrollments.
From input to outcome
How it works
Discover
Next.js renders course lists, filters and detail pages.
Serve
The Express API validates requests and retrieves course data from MySQL.
Refresh
Scheduled import jobs bring new offers into the catalogue.
Distribute
Poster, webhook and Telegram jobs prepare and share content.
Inside the implementation
Engineering decisions
Keep publishing separate from browsing
The scheduler has its own process and job lifecycle. Imports and content distribution can run on schedules independently of frontend requests.
Make failures inspectable
The scheduler records job start, completion, duration and errors, with health-check and cleanup jobs. This gives operators a way to investigate missed runs.
Validate at the API boundary
Course routes combine input validation with operation-specific rate limits, including search and filtering. Authenticated actions are handled separately from public discovery.
A closer look
Analytics & evidence

Explore further
Interested in how I build?
Let’s talk