Overview
The TouchIT App Store is a custom Android app-distribution platform that fills a critical gap for TouchIT interactive LED displays: because the panels ship without Google Play Services, there is no standard way to discover and install Android apps on them. The App Store solves this with a web-based catalog plus a native on-device store app — billed as the “home of thousands of free apps for your LED” — letting schools and businesses search for an app, download it to the LED, and install it with a single tap.
This is the second-generation rebuild of the platform (product version 3.0 / TouchIT_App_Store_v3.apk). I led the rebuild end to end — architecting and writing the Node/Express backend, the React/Redux web frontend, and driving the native Kotlin Android client — with a small team contributing to the frontend and Android app. The backend and frontend were bootstrapped from the well-known RealWorld/Conduit reference apps and then heavily rebuilt into a real product; the Android store client was written natively in Kotlin.
Technical Implementation
Backend (Node.js/Express + MongoDB). A REST API structured around routes/api/* (apps, school, tags, users, profiles, dashboard, auth) over Mongoose models (App, User, School, Comment, File). Authentication uses express-jwt + jsonwebtoken with Passport strategies for Google, Facebook, Twitter, Outlook, and local login. A utils/googleapp/ module vendoring google-play-scraper (with Cheerio, throttled requests, and node-fetch) drives automated acquisition of app metadata to populate the catalog, while Multer handles file/APK uploads. Bootstrapped from the gothinkster RealWorld/Conduit Express backend and then substantially extended (111 commits, 2018–2024).
Web frontend (React + Redux). A Redux + react-router-redux SPA with an Ant Design component layer, featuring catalog search, category/tag navigation, star ratings, markdown rendering, drag-and-drop uploads, notifications, and an admin/management dashboard. Bootstrapped from the gothinkster react-redux-realworld-example-app (Conduit) and rebuilt into the store UI.
Android store client (Kotlin). A native app (com.android.touchit, versionName 3.0.5, minSdk 21 / targetSdk 31) that runs on the LED and presents the on-device store. Built with Kotlin on a reactive, dependency-injected architecture organized into feature packages: Dagger 2 for dependency injection, Retrofit 2 + OkHttp + RxJava2 for the API layer, Glide for imagery, Sugar ORM for local persistence, and runtime permission handling for the download-and-install flow.
Architecture Highlights
The store domain is modeled around App, User, School, Comment, and File, with School a first-class entity reflecting the platform’s classroom/institution focus — every listed app is free and vetted as classroom-appropriate. The automated content-acquisition pipeline (google-play-scraper + Cheerio) backs the store’s “request an app and we’ll add it in as little as 24 hours” promise, while server-side file handling (Multer) and the File model support hosting and delivering APKs to the LEDs. This documents the second-generation rebuild (the v2 codebase, shipping as product version 3.x); an earlier first-generation App Store preceded it and was replaced by this React/Express/Kotlin stack.
Attribution
The web frontend and backend were bootstrapped from the open-source RealWorld / Conduit reference applications (gothinkster react-redux-realworld-example-app and the Node/Express RealWorld backend) and then heavily rebuilt into the production store; the Android store client was written natively in Kotlin. The work documented here is the TouchIT App Store platform built on top of those foundations — the store domain model and API, the automated Google Play acquisition pipeline, the Ant Design store UI and admin dashboard, and the native on-device Android client — which I led and largely implemented, with a small team contributing to the frontend and Android app.
Share