Vishwanath ReddySoftware Engineer II
All projects

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

  • Next.js
  • TypeScript
  • Node.js
  • Express
  • MySQL
  • Redis
  • node-cron
Visit project
Still Discount preview
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

  1. Discover

    Next.js renders course lists, filters and detail pages.

  2. Serve

    The Express API validates requests and retrieves course data from MySQL.

  3. Refresh

    Scheduled import jobs bring new offers into the catalogue.

  4. 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