Piko Digital Platform
Complete admin infrastructure and cross-platform mobile app for a production social platform — 1,000+ daily active users, 300% analytics improvement, 60% reduction in admin overhead.
Confidential internal system. Architecture, technical decisions, and measurable outcomes are documented below. Screenshots and source code are not publicly available due to enterprise security requirements.
Overview
PetoKingdom (Piko) is a social platform for pet owners — profiles, community, events, messaging. This case study covers two systems: the admin platform that made operating a 1,000+ user production platform manageable for a lean team, and the cross-platform mobile and web application that end users interact with.
System 1
Admin Platform & Analytics
Stack
Frontend
React 19 · TypeScript · Material-UI Redux · Chart.js · Plotly.js
Backend
Java 21 · Spring Boot 3 · Spring Security Spring Data JPA · JWT · BCrypt
Database
PostgreSQL · 15+ tables CTEs · Window functions · Flyway migrations
Infrastructure
Docker · AWS · AWS SES GitHub Actions CI/CD
Analytics Platform
Unified 15+ data sources into real-time dashboards tracking DAU/MAU, registration trends, user growth vs. churn, platform growth metrics, content analytics, and peak activity windows. Complex SQL using CTEs and window functions.
-- Monthly growth with MoM comparison
WITH monthly_stats AS (
SELECT
DATE_FORMAT(created_at, '%Y-%m') AS month,
COUNT(DISTINCT user_id) AS active_users,
COUNT(*) AS total_posts,
LAG(COUNT(DISTINCT user_id))
OVER (ORDER BY DATE_FORMAT(created_at, '%Y-%m')) AS prev_month_users
FROM activities
WHERE created_at >= :startDate
GROUP BY month
)
SELECT
month,
active_users,
ROUND(((active_users - prev_month_users) / prev_month_users) * 100, 2) AS growth_rate
FROM monthly_stats
ORDER BY month DESCJWT Authentication + 4-Tier RBAC
Complete security infrastructure built foundational — stateless JWT with access + refresh token rotation, BCrypt password hashing, 4-tier role hierarchy (Super Admin → Viewer), granular permission system, account lockout after failed attempts, and comprehensive audit logging. Zero security incidents post-launch.
User Management System
Full CRUD with server-side pagination, Specification-based filtering (role, status, date range, full-text search), bulk operations, and role assignment with audit trails — managing 1,000+ users without performance degradation.
@Service
public class UserService {
public Page<UserResponse> getUsers(
String search, Role role, UserStatus status, Pageable pageable) {
Specification<User> spec = Specification
.where(UserSpecification.hasSearchTerm(search))
.and(UserSpecification.hasRole(role))
.and(UserSpecification.hasStatus(status));
return userRepository.findAll(spec, pageable)
.map(this::mapToUserResponse);
}
}Automated Content Moderation
Multi-tab report management (Posts, Messages, Users, Events) with bulk actions — ban user, delete content, dismiss report — plus confirmation dialogs, audit trails, and moderation trend analytics. 50% reduction in review cycle time.
System 2
Cross-Platform Mobile App
Stack
Core
React Native 0.76 · Expo 52 · TypeScript 5.3
State & Data
Redux Toolkit · Apollo Client · GraphQL subscriptions
Media
Vision Camera 4 · FFmpegKit · FastImage
Auth & i18n
Firebase Auth · Google Sign-In · Apple Auth LinguiJS 5 — English + Mandarin Chinese
50+ Component Library
Platform file-extension adapters (.native.tsx / .web.tsx) with shared imports — same import on every platform, different renderer. Every component documented in Storybook. Result: 40% faster development velocity for every subsequent feature.
Real-Time Social Features
GraphQL subscriptions over WebSocket — instant messaging, live notifications, feed updates. Apollo cache writes on subscription events (no refetch needed). Optimistic UI for likes and follows.
Media Pipeline
Image: HEIC→JPEG, 70% quality compression, chunked CDN upload. Video: FFmpeg H.264 compression achieving 60–80% size reduction with imperceptible quality loss at mobile viewing sizes.
const compressVideo = async (inputPath: string): Promise<string> => {
const output = `${FileSystem.cacheDirectory}v_${Date.now()}.mp4`;
// H.264 · CRF 28 · fast preset · AAC audio · web-optimised moov atom
const cmd = `-i ${inputPath} -c:v libx264 -crf 28 -preset fast `
+ `-c:a aac -b:a 128k -movflags +faststart ${output}`;
const session = await FFmpegKit.execute(cmd);
if (ReturnCode.isSuccess(await session.getReturnCode())) return output;
throw new Error(await session.getOutput());
};Quantitative Results
| Metric | Result |
|---|---|
| Platform scale | 1,000+ daily active users |
| Analytics improvement | 300% — 15+ data sources unified |
| Admin time saved | 60% via automated RBAC workflows |
| Development velocity | 40% faster via 50+ component library |
| Moderation efficiency | 50% faster review cycles |
| Developer onboarding | 40% faster via 20+ technical SOPs |
| Video compression | 60–80% size reduction via FFmpeg |
| Platform coverage | iOS · Android · Web from single codebase |
Full Stack