Back to Projects
Sunday Suspense
CompletedDartFlutter

Sunday Suspense

Open-source Flutter app to listen to Sunday Suspense episodes

Timeline

Oct 2022 — Jan 2023

Role

Solo

Team

Solo

Status
Completed

Technology Stack

Dart
Flutter

Key Challenges

  • Keeping the episode database fresh as new episodes air — manual curation would never keep up, so the entire pipeline had to be automated end-to-end
  • Building a minimalistic Flutter audio player that handles background playback, lock-screen controls, and resume-where-you-left-off without bloat
  • Organising hundreds of episodes into a sensible taxonomy — by category, genre, and author — without duplicating entries or confusing the browse experience
  • Making a meaningful GPL v3.0 stance in a hobby project: the license terms had to be loud and clear so forks stay open source

Key Learnings

  • GitHub Actions can own the entire content pipeline — scheduled scrapes, regenerated JSON databases, and backups, all without owning any infrastructure
  • A minimalistic player UI respects the content: Sunday Suspense is audio storytelling, and the chrome should get out of the way
  • Distributing via GitHub Releases (instead of the Play Store) keeps distribution aligned with the GPL v3.0 philosophy and removes a closed-source middleman
  • Open-source licensing only works if you document the philosophy, not just the legal text — the README plain-language section matters as much as the LICENSE file

The Problem

Sunday Suspense is a cult-favourite Bengali radio show — part thriller anthology, part storytelling tradition. For millions of listeners, finding and replaying specific episodes used to mean digging through YouTube playlists, SoundCloud links, or scattered Telegram channels. There wasn't a single, well-built mobile app that treated the show with the curation it deserved.

On top of that, every attempt I saw at a "Sunday Suspense app" was closed-source. The maintainer would disappear, the app would go stale, and the community would lose access. I wanted something different: open source, GPL-licensed, and built to last.

What I Built

Sunday Suspense is an open-source Flutter app for listening to the show on Android. It pulls from a curated, regularly-updated episode database, organises episodes by category, genre, and author, and ships with a clean, minimalistic player that doesn't get in the way of the story.

Everything ships from this repo — no proprietary backend, no telemetry, no ads. The app is distributed via GitHub releases, and the full source is under GPL v3.0.

Features

  • Smooth, responsive UI — built natively with Flutter for fluid scrolling and transitions
  • Curation by category — episodes hand-grouped so you can browse by mood, not just by date
  • Categorised by genre and author — Satyajit Ray adaptations, Feluda, Byomkesh, Tarini Khuro, and more
  • Search — find a specific episode by title, author, or story
  • Playback history — the player remembers where you left off, so you can resume mid-story
  • Minimalistic player — large play/pause, scrub bar, and that's it. No distractions while a story is playing
  • Updated weekly — new episodes land in the database automatically; no app update required

How It Works

The app is a thin Flutter client over a versioned episode database. The database holds episode metadata — title, author, genre, category, audio URL, duration — and is bundled with the build. The audio itself streams from publicly hosted sources.

The player is a single-screen experience: tap an episode, hit play, lock your phone. Playback history is persisted locally, so the next launch can offer "continue listening" at the top of the home screen.

Architecture at a glance

Flutter app (Dart)
   │
   ├── Local episode database (JSON) ── updated weekly via CI
   ├── Audio player (background-capable, lock-screen controls)
   ├── Playback history (local persistence)
   └── Search + browse UI (Material)

Automation

This is the part I'm quietly proud of. Two GitHub Actions workflows keep the database fresh without me lifting a finger:

  • update_db.yml — runs on a weekly schedule, scrapes the latest episode metadata, regenerates the JSON database, and pushes the result back to the repo
  • db_backup.yml — mirrors the database to a backup location so a bad scrape can never wipe out months of curation

You can see the status of both workflows right on the README badges. The app never goes stale — your library is always the latest library.

License Philosophy

This project is licensed under GPL v3.0, and I'm deliberate about what that means:

  • Anyone can fork, modify, and redistribute — as long as they stay open source
  • You cannot take this code, rebrand it, and ship a closed-source copy on the Play Store or App Store
  • Any derivative work must disclose its source, state its changes, and retain the original copyright
  • Selling a non-free copy is explicitly not permitted

The README spells this out plainly: "You can ONLY use the source code of this app for Open Source Project under GPL v3.0." I chose GPL specifically because the show itself is a cultural good, and the tooling around it should stay a cultural good too.

Building from Source

The project builds like any standard Flutter app:

git clone https://github.com/imsudip/sunday_suspense.git
cd sunday_suspense
flutter pub get
flutter run

You'll need the Flutter SDK installed. Contributions are welcome — there's a CONTRIBUTING.md in the repo.

Links

Timeline

The repo was created at the end of October 2022, and development kicked off the next month. The Flutter app took shape over a few months, and the project wrapped up in late January 2023 with the addition of GitHub Actions workflows to keep the episode database fresh.

  • Oct 2022 — Repo created and initial Flutter app scaffolded
  • Nov 2022 — Core features built: audio player, episode curation by genre/author, search, playback history
  • Jan 2023 — GitHub Actions automation added (update_db.yml for weekly episode DB refresh, db_backup.yml for backups); final commit

Design & Developed by Sudip Ghosh
© 2026. All rights reserved.