Discovery & editorial mapping
Newsroom workflow interviews, category-rubric design, publish-cadence modeling, GDPR + CCPA posture mapping, App Store and Google Play news-app review choreography.
Case study · Sports Media · Mobile + Web
How we shipped a production sports-media platform — native Swift on iOS, native Kotlin on Android, a React web portal, all reading from a Symfony backend — with a Telegram-bot CMS that gave editors a fast, low-cost publishing surface and a Markdown pipeline that keeps articles rendering identically across the US and EU.
The Media Arena product team needed a sports news platform that covered league events for readers across the United States and the European Union, on iOS, Android, and the web — but the budget did not stretch to a traditional Symfony or Laravel admin panel built from scratch. Editors still had to be able to publish formatted articles, with images and structured headers, at the cadence of a real sports newsroom, and the result had to render identically across every client. We built the backbone in Symfony, wrote native Swift and Kotlin clients so the reading experience matched platform expectations on iOS and Android, layered in a React web portal for desktop and SEO surface, and replaced the missing admin panel with a Telegram bot that editors already used every day. A Markdown 2.0 to HTML and Markdown 1.0 conversion pipeline normalizes every article into one canonical record, so a single edit propagates to all three platforms without per-channel copy-paste. The live product is at media-arena.ru for the US & EU sports-media audience.
A snapshot of what the Media Arena build delivered across iOS, Android, the web portal, and a Telegram-driven editorial workflow in its first production cycle.

The CMS decision was the largest cost lever in the whole build. We chose a Telegram bot over WordPress, Ghost, and a custom Symfony admin panel because the trade-offs lined up with a budget-constrained sports newsroom shipping daily updates. Editors already lived in Telegram for league chatter; replacing one tab in their workflow with a bot that accepted Markdown 2.0 drafts removed the cost of training them on a new admin while collapsing the publish surface to one place. A custom admin panel for a three-platform reader product is a multi-month engineering line item — UI, role-based access control, image upload, draft versioning, preview rendering — most of which the bot side-steps by piggybacking on Telegram's native chat affordances.
WordPress and Ghost were eliminated for different reasons. WordPress's plugin sprawl invites surface-area drift that an editorial team without a dedicated DevOps person cannot manage safely; Ghost's editor is well-built but couples publishing to its rendering layer in ways that fight a Markdown-first pipeline feeding three native clients. Going with a Telegram bot and a normalized Markdown record meant the entire editorial surface — draft, validate, publish, correct — was one chat thread, and the Markdown pipeline stayed the single source of truth across iOS, Android, and the React web portal.
| Dimension | Telegram CMS (Media Arena) | WordPress | Ghost |
|---|---|---|---|
| Publish latency (editor tap to live) | Seconds — bot validates and writes | Minutes — cache flush plus CDN purge | Seconds with native cache, more with custom layouts |
| Multi-platform sync (iOS / Android / web) | One record, three renderers — automatic | REST or GraphQL bridge plus per-client work | Content API plus per-client work |
| Content versioning & rollback | Backend article record is versioned in PostgreSQL | Revisions table; plugin dependent for clean diff | Built-in revisions, scoped to single rendering target |
| Editor learning curve | Zero — editors already use Telegram daily | Block editor familiarity required | Markdown / Koenig editor familiarity required |
| Custom layout fit | Native per-client renderer — no theme constraint | Theme template lock-in | Handlebars theme lock-in for web |
| Plugin / dependency attack surface | Tight — bot endpoint + Symfony service | Wide — plugin ecosystem CVE history | Narrower than WP, broader than custom |
| Cost to first publish | Low — no admin UI build | Low for single channel; high for native clients | Low for web; integration cost for native clients |
References: Telegram Bot API documentation, Symfony framework documentation, CommonMark specification.

The iOS client is built in Swift with a UIKit + SwiftUI hybrid that keeps the home feed buttery on older devices while letting newer surfaces use declarative views. Article bodies arrive from the Symfony backend as a normalized Markdown record; on the device a converter renders attributed strings with the typographic detail platform readers expect — proper smart quotes, league-name kerning, native pull-quotes, and inline image cards that respect dynamic type. The home feed groups stories by category rubric, lets the reader resort by recency or relevance, and persists per-user filters locally so the next launch feels personalized without a network round-trip.
Push notifications hook into APNs for breaking stories and weekly digests, with topic subscriptions that mirror the editor's category rubrics one-for-one. Full-text search runs against a search index on the backend with snippets highlighted client-side, and athlete profile pages stitch together every article tagged to a player without a dedicated profile table — the same article store, queried with different filters. The end-to-end iOS surface is delivered as part of our mobile app development practice.

The Android client is written in Kotlin with Jetpack Compose for new surfaces and a stable RecyclerView spine for the article feed where vertical performance matters most. The Markdown rendering layer is mirror-symmetric to the iOS client: the backend ships the same normalized record, and a Compose-friendly renderer turns it into spans, images, and embedded media that respect Material 3 typography. WorkManager handles the periodic refresh of category rubrics, push-token rotation against Firebase Cloud Messaging, and the background pre-warming of the stats dashboard so the first frame is never blank.
The stats dashboard is where the Android client carries its own weight against the web portal. Live league data flows in through the Symfony REST API as a separate stream from articles, joining at the client only for in-context display alongside a story. Cross-store category filters — sport, league, team, athlete, region — combine client-side into a single query, and a cached query plan means re-applying a filter is instant after the first run. The same engineering team carries iOS and Android in lockstep as part of our iOS and Android engineering practice.

The editorial pipeline is the heart of the build. Editors compose drafts in Telegram, the bot validates structure (heading order, image-alt presence, link integrity), and on publish a versioned article record lands in PostgreSQL. Markdown 2.0 input is parsed into an abstract syntax tree once, then projected into HTML for the web portal, Markdown 1.0 for any downstream feed, and the per-client attributed-string forms that iOS and Android consume. Image uploads pass through a WebP pipeline with size variants and Open Graph + Twitter card pre-generation, so a share embed on social platforms across the United States and the European Union renders cleanly on first paste.
Reader privacy is built into the platform from day one. Analytics are anonymous by default, push opt-in is granular, and the consent flow is region-aware: users in the European Union receive the granular GDPR screen with separate toggles for product analytics; users in California receive the CCPA / CPRA "Do Not Sell or Share My Personal Information" disclosure in the same flow. Editorial actions write to an audit log that supports correction history, retraction tracking, and per-user role review without exposing reader identity. The result is an editorial surface that holds up to scrutiny across the US & EU without retrofitting compliance later.
Compliance posture: GDPR-aligned · ISO 27001 ready · SOC 2 Type II in progress · HIPAA-capable · CCPA-acknowledged.
A five-phase build that took Media Arena from product specification to production across iOS, Android, the web portal, and a Telegram-bot editorial workflow.
Newsroom workflow interviews, category-rubric design, publish-cadence modeling, GDPR + CCPA posture mapping, App Store and Google Play news-app review choreography.
Symfony backend skeleton, PostgreSQL article schema with versioning, Markdown 2.0 parser, HTML + Markdown 1.0 + attributed-string projectors, Telegram-bot CMS bridge.
Native Swift iOS client on UIKit + SwiftUI; native Kotlin Android client on Compose + RecyclerView; React web portal; full-text search, category filters, push notifications.
Region-aware consent, editorial audit log, role-based publishing, image pipeline hardening, store-review preparation, third-party readiness assessment scaffolding.
App Store + Google Play submission across US and EU storefronts, web portal SEO go-live, editorial onboarding through the Telegram bot, first-cycle correction loop.
Media Arena's fan-engagement layer was built so the platform could grow from a news reader into a richer companion app without re-platforming. Full-text search runs against an indexed view of the article store with snippet highlighting on the client, and personalization is opt-in: a reader can pin teams and athletes, and the home feed promotes those rubrics without writing identifying data back to the server until the reader explicitly accepts it. League data — schedules, scores, athlete bios — flows in through dedicated ingest adapters that normalize external feeds into the same canonical article record, so a live-score block and an editor's match recap render in the same surface without separate clients reasoning about two different data shapes. Push topic subscriptions mirror the editor's category rubrics one-for-one, and the Telegram-bot CMS doubles as a broadcast surface: an editor pushes a breaking story and a sport-specific push notification fires automatically against the same subscription topic. The whole subsystem is designed so a future fantasy-league overlay, a fan-club tier, or a sponsored content layer is a configuration change against the article store and the entitlement service, not a code release.
Media Arena launched on Apple App Store and Google Play with storefronts active across the United States and the European Union, plus the React web portal indexed for both markets. The English-language build serves readers in California, New York, Texas, Florida, and Washington in the US, and readers in the Netherlands, Germany, France, Ireland, and Sweden in the EU, without a separate codebase per region. Consent flows are region-aware at the client layer: users in the EU and EEA receive a GDPR-style granular consent screen with separate toggles for product analytics and push categories; users in California receive a CCPA-style "Do Not Sell or Share My Personal Information" disclosure in the same flow. Data-handling practices are aligned with GDPR for European users and with the US state-privacy patchwork — CCPA / CPRA (California), VCDPA (Virginia), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas), and Oregon CPA. Because the platform stores minimal reader data and reads remain anonymous by default, regional compliance reduces to honest disclosure rather than per-jurisdiction data segregation.
The editorial surface was rolled out across US and EU sports newsrooms in parallel — Netherlands, Germany, France, Sweden, and Ireland for EU coverage; US East and US West editorial leads for North America — with each region using the same Telegram bot. The article store sits behind a CDN that caches per-region for low latency on both sides of the Atlantic, and a stateless rendering layer means a future European Union data-residency commitment is an infrastructure decision, not a re-architecture. The engineering team behind the build sits across CET and runs a CET workday with East-Coast US overlap (9 AM–1 PM ET) for editorial standups, store-review choreography, and incident response — the timezone that lets a US editorial team and an EU engineering team share four hours of live overlap every day.
The active custom software development roadmap for Media Arena includes a fantasy-league overlay that lets readers track picks against the same article store, a sponsored-content tier with audited disclosure, a Tauri-based desktop reader sharing business logic with the mobile codebase, and an expanded league-data ingest layer for live scores across US and EU competitions. A B2B tier serving sports clubs with private editorial channels is planned, and the entitlement subsystem is already structured for multi-seat assignment. Infrastructure plans include further CDN regionalization, an internal editorial-quality continuous-verification harness, and a future independent readiness assessment scaffolded into the cloud & DevOps roadmap.
If you are planning a sports-media platform, a news app, or any cross-platform editorial product where the publish surface has to stay fast and the cost per article has to stay low for audiences in the US and EU, we have shipped this stack end-to-end and can compress the build timeline meaningfully. The live product is available at media-arena.ru on iOS, Android, and the web, and the engineering team behind it sits inside YuSMP Group. We work fixed-price for well-scoped MVPs and on dedicated development teams for ongoing delivery, with a CET workday and a guaranteed East-Coast US overlap (9 AM–1 PM ET) window for stand-ups, demos, and incident response.
A focused sports-media MVP covering native iOS, native Android, and a React web portal — with a Symfony backend, a single editorial workflow, full-text search, and push notifications — typically costs $140k–$280k. Adding live-score ingestion, athlete profiles, a stats dashboard, fan-engagement features, and an editorial CMS surface for non-technical editors brings a full-featured product to $320k–$650k. The dominant cost drivers are the cross-platform article-rendering pipeline, the live-feed integrations with league data providers, and the editorial tooling that keeps the per-article publishing cost down.
A Telegram bot CMS removes the cost of building, hosting, and securing a custom admin panel while giving editors a publishing surface they already know how to use. Editors paste a Markdown draft into a chat, the bot converts Markdown 2.0 to HTML and Markdown 1.0 variants, validates structure, and writes a single canonical record to the article database. iOS, Android, and the React web portal all read from the same record, so cross-platform rendering stays consistent without a separate publishing step per channel.
The article body is stored once in a normalized Markdown form on the Symfony backend, then converted at publish time into the rendering format each client expects — HTML for the web portal, native attributed strings for iOS, and a Compose-friendly representation for Android. Images route through a WebP pipeline with size variants, Open Graph and Twitter card images are pre-generated for share embeds, and a versioned article record means a correction publishes everywhere from one edit without re-typing the article into three different platforms.
A sports-media app collects far less personal data than a typical e-commerce or fintech build, but the obligations are still real. Reader analytics, push-notification opt-ins, and any account features all need transparent disclosure plus a granular consent flow that satisfies GDPR for European Union users and CCPA / CPRA for users in California and the broader United States. Push tokens are stored with a clear retention window, anonymous reading is the default, and a request to delete is a single backend job.
A focused MVP with a Symfony backend, native Swift and Kotlin clients, a React web portal, a Telegram-bot CMS, a Markdown publishing pipeline, full-text search, and push notifications typically takes 14–20 weeks. Adding athlete profiles, a stats dashboard, a fan-engagement layer, and live-feed integrations with league data providers adds 6–10 weeks. The hardening pass for editorial tooling, role-based publishing, and audit-ready content moderation is frequently underestimated and should be budgeted at 3–5 weeks.
Related cases
Patient app for a 40-city lab network — appointment booking, results, push notifications, accounting integration.
View case → Retail · FashionRetail consultant app for boutique inventory across stores — ElasticSearch, 1C integration.
View case → HealthTech · NutritionCross-platform diet and meal-planning app — Flutter, calorie engine, grocery ordering.
View case →