Project
About project
About project
About project
Fame to Flame is a nationwide dance championship. The goal of the project was to build a VK Mini App (VK is a Russian online social media and social networking service) that would provide a simple and transparent system for participant registration, voting, and receipt submission as part of a purchase-based promotional campaign.
In just two months, we designed, developed, and launched a platform for 80,000 users. It combined receipt registration, video uploads and playback, voting, prize draws, and analytics while remaining stable under heavy traffic. The platform supported three user roles—participants, spectators, and organizers—with dedicated user flows and tailored tools for each.
Participants recorded and uploaded dance videos that spectators could vote for. Spectators, having purchased participating beverages, submitted their receipts, earned points to vote for dancers, and entered prize draws featuring rewards ranging from promo codes to iPhones.
The winners of the online stage advanced to qualifying rounds in Krasnoyarsk, Krasnodar, and Moscow before competing in the grand final in the capital. Organizers managed the competition through an admin panel, where they moderated content, managed prize draws, and monitored user activity.
The biggest challenge was maintaining stable performance under heavy load throughout the competition. The Doubletapp team built a resilient platform, designed intuitive interfaces, and implemented every competition mechanic without interruptions
CHALLENGE
CHALLENGE
CHALLENGE
The project's primary objective was to increase audience engagement through an interactive competition. We needed to build a reliable, user-friendly online platform that would support receipt registration, dance video uploads, community voting, and prize draws.
The client wanted to:
- simplify digital communication by bringing all interactions between the brand and its audience into a single platform
- connect offline sales with digital engagement by making receipt registration the gateway to voting and prize draws while encouraging repeat purchases
- strengthen the brands' positive image through associations with movement, music, youth, sports, and energy
- promote sports and a healthy lifestyle through an engaging dance competition
To achieve these goals, we developed a comprehensive digital solution consisting of a VK Mini App and a landing page, capable of handling heavy traffic while providing a seamless experience for every user role.

SOLUTION
SOLUTION
SOLUTION
We began by identifying every user role and mapping out how each one would interact with the platform. Based on this research, we created interactive prototypes. The design was approved within the first month, while the engineering team simultaneously started developing both the backend and frontend.
Just two months later, the VK Mini App went live. Participants registered receipts and uploaded dance videos, while the audience voted for their favorite performances and took part in prize draws. Organizers handled the entire competition through an intuitive admin panel. Every interaction was designed to be frictionless, with built-in social sharing to maximize engagement.
To make this possible, we implemented several key solutions:
- A custom video player with interactive features such as swipe navigation, likes, and sharing. Inspired by modern short-form video platforms, it provided full control over uploaded content, ensured uploaded videos could not be removed, and delivered a smooth viewing and seeking experience.
- We optimized content delivery and introduced an efficient caching strategy to reduce server load. Even during peak periods with thousands of concurrent video views and votes, requests were processed without delays.
- We designed an intuitive interface with color-coded user roles, making it easy to understand every stage of the competition—from registering and uploading videos to browsing prizes.
- We built a dedicated admin panel that allowed organizers to moderate content, manage prize draws, and monitor project analytics.
As a result, participants enthusiastically uploaded their performances, spectators voted for their favorite videos and shared them on social media, organizers stayed in complete control of the competition, and the final livestream ran flawlessly. The platform proved to be fast, reliable, and scalable, prompting the client to adopt it for future editions and turn the championship into an annual event.

RESULTS
RESULTS
RESULTS
The platform quickly became an active engagement hub. Spectators purchased beverages, registered receipts in the app, and immediately spent their earned points to vote for their favorite performances, enter prize draws, or exchange them for tickets to offline events and branded merchandise. Rewards included partner gift certificates, promo codes, and even iPhones. In total, the platform attracted 80,000 users.
Participants showcased their creativity, shared their passion for dance, and received immediate feedback from the community. The winners of the online voting advanced to regional qualifiers in Krasnoyarsk, Krasnodar, and Moscow. In Krasnoyarsk alone, 500 dancers from 12 Siberian cities performed on stage before an audience of 1,500 spectators. The grand final, held in Moscow from November 6 to 9, brought together 150 of the country's best dancers, who competed before an international jury for prizes from the event's sponsors.
Ultimately, everyone benefited from the competition. Beyond improving their dance skills, participants discovered talented teammates, mentors, and friends from across the country. The platform fostered a vibrant community where dancers could grow together, celebrate each other's achievements, and stay inspired.
For the final stage of the championship, all competition functionality was seamlessly migrated to the client's landing page while preserving every feature and ensuring a stable livestream of the grand final. The platform demonstrated outstanding reliability, handled peak traffic without issues, and delivered the audience engagement needed to achieve both the competition's objectives and the client's marketing goals.
This project demonstrates how technical expertise combined with a strong focus on user experience can transform a complex set of requirements into a memorable digital product. The Doubletapp team created a complete ecosystem where technology, design, and marketing worked together seamlessly.
FRONTEND
BACKEND
MONITORING

Our super team
PavelFrontend
IlyaDesign
DmitriiBackend
KirillFrontend
IvanQA
IvanAccountingBACKEND
BACKEND
BACKEND
Video Streaming Service
We developed a custom video streaming service based on the same principles used by modern short-form video platforms such as YouTube Shorts. Unlike traditional browser playback, where users must wait for a video to buffer after seeking, our solution delivers content in small sequential chunks using HTTP streaming. This allows playback to begin instantly from any point in the video while automatically adjusting quality to match the user's network speed, significantly improving content delivery.
Initially, we considered using VK's built-in video player. However, it did not provide sufficient control over uploaded videos—users could delete or hide their content, creating risks for the competition. By hosting and managing all videos within our own platform, we ensured reliable streaming, complete content control, and a secure competition environment.
Because the platform was designed to handle heavy traffic, we leveraged GPU hardware acceleration to maximize performance and scalability. Video transcoding was performed using dedicated NVENC and NVDEC hardware encoders and decoders, allowing thousands of GPU cores to process videos in parallel. This offloaded computationally intensive work from the CPU, which remained available for handling HTTP requests, database operations (PostgreSQL and Redis), and background jobs powered by Celery. As a result, users experienced fast uploads and responsive playback, while the platform maintained stable performance even during periods of peak activity.
Backend Architecture Optimization
The backend of the mini app is built with Django Ninja, a lightweight, high-performance Python framework for building APIs. PostgreSQL serves as the primary database, while Redis is used both as an in-memory cache and as the message broker for Celery. Celery handles asynchronous background tasks such as video transcoding. Instead of making users wait while a video is processed, the upload is immediately handed off to a background worker, keeping the application responsive.
Every uploaded video is automatically transcoded into three resolutions: 480p, 720p, and 1080p. Each version uses its own optimized audio and video bitrate settings to balance streaming quality, file size, and chunk delivery speed. This approach ensures smooth playback while making efficient use of computing resources.
Beyond video processing, Celery also manages background jobs such as starting and ending prize draws, running competition workflows, and updating participant rankings.
Caching
To maintain reliable performance under heavy traffic, we implemented three complementary caching strategies that reduce server requests, lower database load, and improve response times.
1. Server-side caching
Frequently requested data is stored in Redis, an in-memory data store that delivers responses significantly faster than disk-based storage. By serving cached responses directly from memory instead of querying PostgreSQL, the platform can process more requests with fewer resources. Nearly half of all API endpoints are cached in Redis, which is particularly valuable during peak traffic.
2. Client-side caching
Certain data is cached directly in the user's browser and reused across requests. For example, the prize catalog is cached for several hours, allowing subsequent visits to load instantly without contacting the server.
Participant rankings use a different strategy. Ranking data is stored in a PostgreSQL materialized view, which is refreshed every five minutes. Since the frontend knows exactly when the next update will occur, it safely relies on cached data until then. This approach is ideal for datasets with predictable refresh intervals.
3. Conditional HTTP requests
When content hasn't changed, the server returns only a validation response instead of the full payload, confirming that the browser already has the latest version. This reduces bandwidth consumption and speeds up page loading.
We also enabled gzip compression for all static assets. During the build process, HTML, CSS, and JavaScript files are automatically compressed before being served, reducing transfer size and improving loading performance.
Monitoring
To ensure platform stability and quickly detect potential issues, we deployed a monitoring stack based on Prometheus, Grafana, and Alertmanager.
Prometheus continuously collects infrastructure metrics, including CPU utilization, memory and disk usage, request volume, response times, and other key performance indicators. The metrics are stored as time-series data, making it easy to identify traffic patterns and detect anomalies.
Grafana visualizes these metrics through real-time dashboards, giving the team continuous insight into system health and the performance of individual services.
Alertmanager automatically sends notifications whenever predefined thresholds are exceeded. For example, if CPU utilization reaches a critical level during testing, the team receives an alert via a Telegram bot. No such incidents were observed in production, where resources remained well balanced throughout the competition.
The platform also uses centralized logging, allowing all services to send logs to a single location for faster troubleshooting and error analysis.
VK Integration
Unlike Telegram Mini Apps, which can be deployed without prior approval, VK Mini Apps must pass a mandatory moderation process consisting of two stages.
First, the VK team reviews the application, evaluating its functionality, interface, visual design, and overall user experience while asking follow-up questions about its logic when necessary. The second stage is an open beta test conducted by the VK Testers community. Volunteer testers evaluate the application and submit bug reports, helping identify edge cases and ensuring the product is fully ready for release. We successfully completed both stages, and the application was published in the official VK Mini Apps catalog.
As a contingency plan, we also considered migrating the project to Telegram Mini Apps. The backend architecture was already compatible and would have required only changes to the authentication flow. The frontend, however, would have required substantial refactoring because the Telegram and VK SDKs expose different APIs and capabilities. Fortunately, this fallback scenario was never needed.

FRONTEND
FRONTEND
FRONTEND
Custom Video Player
Initially, we considered embedding videos through VK's built-in iFrame player, which would have allowed us to stream videos directly from VK without maintaining our own storage or transcoding pipeline. However, this approach came with several limitations:
- no way to detect whether users had removed or hidden their videos
- no control over video privacy
- no ability to implement custom controls such as likes, sharing, or a swipeable short-video feed
To overcome these limitations, we developed a fully custom video player.
Its implementation required:
- an S3-compatible object storage for hosting uploaded videos
- automatic transcoding into multiple resolutions (480p, 720p, and 1080p) so playback quality could adapt to each user's network conditions
- support for interactive features including swipe navigation, likes, sharing, and a smooth scrolling feed across devices
This approach gave us complete control over user-generated content while delivering predictable performance and an excellent viewing experience, even on unstable network connections.
Frontend Optimization
The frontend was implemented as a single-page application (SPA) and deployed as static assets. During the build process, the compiled HTML, CSS, and JavaScript files are packaged into an Nginx image and served directly to users.
To improve loading speed and reduce server load, we enabled gzip compression and long-lived caching for static assets. These optimizations are particularly important for the short-video feed, where users rapidly switch between videos and responsiveness directly impacts engagement.
We also implemented incremental data loading. The player requests the next batch of videos only when users scroll further through the feed, reducing bandwidth consumption while keeping the interface highly responsive.
VK SDK Integration
Because the application runs inside VK, the frontend is tightly integrated with the VK Mini Apps SDK, which provides access to the VK ecosystem.
The SDK powers several key features:
- user authentication
- QR code scanning
- uploading videos directly to users' VK profiles.

DESIGN
DESIGN
DESIGN
The client did not require lengthy reviews or multiple approval rounds—the team took full ownership of the project from day one. We quickly understood the competition mechanics, brand guidelines, and visual priorities, created interactive prototypes, and aligned on the overall UX before moving into implementation. Once the design phase began, every decision was made quickly, on schedule, and without requiring major revisions.
One of the key design solutions was color-coding user roles. Each role was assigned a distinct color: blue for participants, orange for spectators, and red for users submitting purchase receipts. This visual system helped users immediately understand where they were in the competition flow and distinguish between different actions within the app. A simple and visually clean design made the product convenient and recognizable—without unnecessary approvals or complex revisions.









