Inspiration

Coralytics was inspired by the idea that our online presence should be easier to understand, not just easier to measure.

Most people leave behind years of social media posts, comments, captions, reactions, and engagement data. These exports contain meaningful signals about personality, communication style, interests, tone, and growth over time. However, when users finally download their data, it usually appears as folders, JSON files, spreadsheets, or raw text that are difficult to interpret.

We wanted to turn that experience into something more human and memorable. Instead of presenting a user's digital footprint as a cold analytics report, Coralytics transforms it into a living 3D coral reef. Coral felt like the right metaphor because reefs grow slowly, branch out in different directions, respond to their environment, and become more complex over time.

A user's online identity works in a similar way. One post may seem small, but hundreds of posts reveal patterns. Coralytics was built to help users see those patterns clearly, reflect on their digital persona, and understand how they might appear to others.

What it does

Coralytics is a full-stack web application that turns social media export files into an interactive 3D coral visualisation.

Users can upload their social media data, and Coralytics extracts posts, comments, timestamps, engagement values, and platform information. The backend then analyses the content for sentiment, topics, platform trends, possible red flags, and persona insights.

The results are shown in two main ways:

  1. Interactive 3D Reef: Users can explore a personalised coral reef generated from their own data. Topics, sentiment, engagement, and post history influence the coral's shape, colours, and interactive details. Users can filter the reef by platform, click into posts, inspect topics, and view how different parts of their online presence connect.

  2. Insights Dashboard: Users can visit an insights page that presents a clearer analytical breakdown. This includes sentiment summaries, top topics, platform comparisons, activity trends, risk indicators, and recommendations for how their online persona may be perceived.

Coralytics also supports privacy-focused sharing. Users can create a recruiter-friendly public preview of their coral and insights without exposing their full raw data. The share view is designed to show a polished snapshot of a user's digital persona while respecting privacy settings.

How we built it

We built Coralytics with a React and Vite frontend, a Python FastAPI backend, Three.js for the 3D coral experience, and Firebase for authentication, database storage, and hosting-related infrastructure.

Frontend

React Router handles the main application routes, including the coral dashboard, insights page, login page, share page, and public recruiter view. Three.js powers the interactive coral visualisation. Instead of using one static model, the coral is procedurally generated from the user's analysis results, so every user's reef looks different depending on their data.

Backend

FastAPI manages uploads, parsing, analysis, and persistence. When a user uploads an export file, the backend stores the original data, extracts normalised posts, detects duplicates, and prepares the content for analysis. The analysis services then generate sentiment summaries, topic groups, red flag indicators, platform breakdowns, persona summaries, and organism data for the frontend.

Data Architecture

We separated the data into two main layers:

  1. Raw Layer: Stores raw uploads, normalised posts, upload metadata, and original file information.

  2. Analysis Layer: Stores analysis results, post insights, sentiment summaries, topics, and the generated coral data.

This separation kept the original data distinct from interpreted results, making the system easier to extend and re-analyse later. Firebase Auth handles user accounts, while Firestore stores user-scoped uploads, analyses, privacy settings, usernames, and share records. We also built privacy controls so shared recruiter links can be filtered before becoming public.

Challenges we ran into

Messy Export Data: Different platforms structure their exports differently, and files may be incomplete, nested, duplicated, or missing useful fields. We had to build ingestion logic that could handle different formats, normalise posts, record warnings, and avoid breaking when data was imperfect.

Meaningful 3D Mapping: Translating analysis results into a 3D coral required careful design. The visualisation had to reflect data in a way that was understandable rather than just attractive. We had to decide how topics, sentiment, engagement, and post volume should influence the coral without cluttering the scene.

Performance Optimisation: Rendering dense visual details in Three.js across hundreds of posts can slow down the browser. We balanced visual richness with performance by controlling geometry complexity, reusing materials, and limiting simultaneous detail exposure.

Data Schema Iteration: Designing a database structure capable of supporting raw uploads, normalised posts, analysis history, insights, privacy settings, and share links required iteration to support both current functionality and future scalability.

Privacy Controls: Handling personal social media data required strict boundaries around storage, display, and public sharing. The recruiter preview needed to provide value without exposing sensitive information.

Accomplishments that we're proud of

Memorable User Experience: Combining a living 3D coral with concrete analytics (sentiment, topics, platform trends, red flags) makes exploring digital identity visually engaging and informative.

End-to-End Engineering: Built a complete pipeline encompassing upload handling, parsing, data normalisation, analysis services, Firestore persistence, authentication, privacy controls, and public share links.

Procedural Coral Generation: The reef is dynamically shaped by individual analysis data, serving as a unique visual summary of the user's online history rather than a static 3D model.

Privacy-Focused Sharing: Implemented a secure snapshot feature allowing users to share professional representations of their online persona with recruiters while maintaining control over raw data exposure.

Technical Depth Meets Usability: Successfully integrated full-stack engineering, natural language processing (NLP), 3D graphics, and complex data modelling into an intuitive user workflow.

What we learned

Data Transformation Matters: Raw social media exports are only valuable when structured through thoughtful parsing, analysis, and presentation.

Foundations Drive Visuals: 3D visualisations rely on strong backend data contracts. A responsive interface requires consistent, structured analysis inputs.

Full-Stack Connectivity: Building Coralytics highlighted how authentication, storage, analysis, state management, and 3D rendering directly impact one another across the architecture.

Privacy Design: Managing personal data highlighted the necessity of clear privacy boundaries and user control when presenting individual insights.

Reflective Analytics: Visualising data organically can transform a standard metric review into a tool for self-reflection.

What's next for Coralytics

Expanded Platform Support: Increase export parser compatibility for additional social media platforms and refine edge-case handling.

Advanced Analysis: Implement stronger topic modelling, deeper persona summaries, career-oriented recommendations, toxicity/reputation metrics, and clearer insight explanations.

Enhanced Coral Mechanics: Improve the 3D reef to reflect temporal changes over time, support expanded interaction models, and clarify visual-to-data mappings.

Polished Professional Profiles: Develop the recruiter preview into a full digital identity profile featuring privacy settings, professional summaries, and exportable reports.

Longitudinal Tracking: Transition Coralytics into an ongoing reflection tool where users can upload periodic exports to track how their digital reef evolves over time.

Built With

Share this project:

Updates