Skip to main

Case study · Sports Media · Mobile + Web

Media Arena — sports media on iOS, Android, and web

Published · Updated · By YuSMP Group Engineering

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.

IndustrySports Media · Mobile
Project year2023
EngagementFixed price + support
Media Arena — sports news feed on iOS, Android, and web with a Telegram-bot editorial CMS

The brief — a sports-media platform without a custom CMS budget

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.

Project highlights

Symfony backend with REST API Native Swift iOS client Native Kotlin Android client React web portal Telegram-bot editorial CMS Markdown 2.0 to HTML pipeline Full-text search and category rubrics Cross-platform sync · US & EU

By the numbers

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.

3delivery platforms — native iOS, native Android, and a React web portal sharing one canonical article store
1editorial surface — a Telegram bot replacing a full custom admin panel for the US & EU sports newsroom
0per-channel re-typing — Markdown is parsed once and rendered on every client from a single record
2Markdown dialects supported in conversion — Markdown 2.0 input plus Markdown 1.0 and HTML output
4Agile phases — Discovery, Analytics, Design, Development — running with daily editorial feedback
14–20 wktypical delivery window for a comparable sports-media MVP on iOS, Android, and web
Media Arena live news feed — Symfony backend, Markdown 2.0 to HTML pipeline, full-text search across rubrics

Why a Telegram-bot CMS over WordPress, Ghost, or a custom admin

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.

Telegram-bot CMS vs WordPress vs Ghost — at a glance for a multi-platform news product
Dimension Telegram CMS (Media Arena) WordPress Ghost
Publish latency (editor tap to live)Seconds — bot validates and writesMinutes — cache flush plus CDN purgeSeconds with native cache, more with custom layouts
Multi-platform sync (iOS / Android / web)One record, three renderers — automaticREST or GraphQL bridge plus per-client workContent API plus per-client work
Content versioning & rollbackBackend article record is versioned in PostgreSQLRevisions table; plugin dependent for clean diffBuilt-in revisions, scoped to single rendering target
Editor learning curveZero — editors already use Telegram dailyBlock editor familiarity requiredMarkdown / Koenig editor familiarity required
Custom layout fitNative per-client renderer — no theme constraintTheme template lock-inHandlebars theme lock-in for web
Plugin / dependency attack surfaceTight — bot endpoint + Symfony serviceWide — plugin ecosystem CVE historyNarrower than WP, broader than custom
Cost to first publishLow — no admin UI buildLow for single channel; high for native clientsLow for web; integration cost for native clients

References: Telegram Bot API documentation, Symfony framework documentation, CommonMark specification.

Media Arena iOS — Swift native client rendering athlete profiles and category rubrics from the Symfony backend

iOS build — Swift, native rendering, and category-aware feed

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.

Media Arena Android — Kotlin client with stats dashboard and category filters fed by the Symfony REST API

Android build — Kotlin, native rendering, and a stats surface

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.

Media Arena editorial pipeline — Symfony backend, Telegram-bot CMS, Markdown 2.0 to HTML conversion, audit-ready posture

Editorial pipeline, audit-ready logging, and privacy posture

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.

Delivery methodology

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.

Phase 1

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.

Phase 2

Backbone & pipeline

Symfony backend skeleton, PostgreSQL article schema with versioning, Markdown 2.0 parser, HTML + Markdown 1.0 + attributed-string projectors, Telegram-bot CMS bridge.

Phase 3

Platform builds

Native Swift iOS client on UIKit + SwiftUI; native Kotlin Android client on Compose + RecyclerView; React web portal; full-text search, category filters, push notifications.

Phase 4

Audit-ready hardening

Region-aware consent, editorial audit log, role-based publishing, image pipeline hardening, store-review preparation, third-party readiness assessment scaffolding.

Phase 5

Launch & telemetry

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.

Fan engagement, search, and a foundation for league data

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.

Launching across the United States and the European Union

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.

Tech stack and roadmap

Symfony PHP PostgreSQL Redis Swift SwiftUI UIKit Kotlin Jetpack Compose React Telegram Bot API Markdown 2.0 CommonMark REST API APNs Firebase Cloud Messaging WebP pipeline CDN Docker Nginx

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.

Build a sports-media platform like this — talk to us

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.

Book a discovery call See mobile development services

Frequently asked questions

How much does it cost to build a sports-media platform on iOS, Android, and web?

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.

Why use a Telegram bot as a CMS instead of WordPress or Ghost for a news app?

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.

How do you keep articles rendering identically on iOS, Android, and the web?

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.

What does GDPR and CCPA compliance look like for a sports-media app?

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.

How long does it take to ship a sports-media platform across iOS, Android, and web?

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.

Share this case

LinkedIn X

Plan a similar build

Book a discovery call