Yandex Metrika tracking pixel
Behind the Build: Personality Compass - 454 Questions Offline | Blog

Behind the Build: Creating Personality Compass

✍️ by Ilja Serõšev, solo developer from Estonia

🧭 Personality Compass is an offline-first self-discovery app with 454 questions across three psychological models. It generates professional PDF reports, works 100% offline, and collects zero data. Here's the story of how I built it.

🧠 The Problem I Wanted to Solve

I've always been fascinated by personality psychology – Enneagram, Big Five, and other models. But I had two major frustrations:

So I decided to build my own solution. One that works 100% offline, keeps all data on device, and offers real depth – 454 questions in total, completely free.

🏗️ The App at a Glance

Aspect Details
Platform Flutter / Dart
Architecture Offline-first, local data only
Languages English, Russian, Estonian (full localization)
Total Questions 454 across all tests
Tests MindPath 16 (80/20 Q), MindPath 5D (120/20 Q), Enneagram (254/81 Q)
PDF Reports Professional exports with charts, colors, and insights
Storage All results saved locally, no cloud, no registration

🔧 Technical Deep Dive

Project Structure

📁 lib/
├── components/ - Reusable UI components
│ └── enneagram/
│ ├── cards/ - Cards for enneagram result display
│ │ ├── action_buttons.dart - Action buttons (PDF, history)
│ │ ├── arrows_card.dart - Development arrows card
│ │ ├── career_card.dart - Career aspects
│ │ ├── development_card.dart - Personal development
│ │ ├── interactive_chart_card.dart - Interactive diagram
│ │ └── type_card.dart - Main enneagram type
│ └── charts/
│ └── interactive_enneagram_chart.dart - Interactive visualization
├── constants/ - Constants and configurations
├── l10n/ - Localization
├── models/ - Data models (19 model files)
├── screens/ - Screen widgets (18 screens)
├── services/ - Business logic and data handling
├── utils/ - Utility helpers
│ ├── enneagram_complete_pdf/ - PDF generation
│ │ ├── sections/ - 10 PDF report sections
│ │ └── widgets/ - PDF widgets
│ └── pdf_exporter.dart - PDF generation utilities

📁 assets/
├── content/
│ ├── enneagram/ - Enneagram content in 3 languages
│ │ ├── descriptions/ - 8 categories of descriptions
│ │ └── questions/ - 3 question sets (254 total)
│ ├── interpretations/ - Result interpretations
│ └── mindpath/ - MindPath 16/5D questions
└── lang/ - Localization files (en.json, et.json, ru.json)
📝 Note: All content files support three languages (en, et, ru) with language-specific extensions like core_descriptions_en.dat, core_descriptions_et.dat, etc.

Key Technical Challenges & Solutions

1. 100% Offline PDF Generation with Complex Graphics

The biggest technical hurdle: generating professional PDF reports that include interactive-style charts, all without internet.

Solution:

// Example: Capturing chart for PDF final boundary = _chartKey.currentContext?.findRenderObject() as RenderRepaintBoundary; final image = await boundary.toImage(pixelRatio: 3.0); final byteData = await image.toByteData(format: ImageByteFormat.png);

2. Building Original Psychological Models

I wanted the depth of comprehensive personality models but faced two challenges: privacy concerns (most tests send data to servers) and trademark restrictions. So I built my own:

Both are completely original, 100% offline, and free from any third-party intellectual property restrictions.

3. The Full Enneagram (254 Questions!)

Most free Enneagram tests give you a type in 5 minutes. But real Enneagram work includes wings, subtypes, and development levels.

Implementation:

4. Interactive Enneagram Chart with "Smart" Arrows

The Enneagram diagram shows 9 points with connecting arrows. I wanted it to be context-aware:

This "interactivity → PDF" cycle ensures users see the same visualization in reports as in the app.

🎨 Design System & Consistency

I built a centralized style system (EnneagramCardStyles) that ensures visual consistency across all screens and PDF reports:

// Single source of truth for styles import './utils/enneagram_card_styles.dart' as styles; // Using consistent components everywhere styles.EnneagramCardStyles.buildEnhancedCard() styles.EnneagramCardStyles.buildColoredSection()

Each Enneagram type has its own color profile, consistently applied in UI, settings, and PDF exports.

🧪 Testing & Reliability

Unit tests ensure accuracy of psychological calculations:

flutter test

📊 By the Numbers

3
Psychological Models
454
Total Questions
3
Languages
4
App Stores

📱 What Users Get

🚀 What's Next?

The architecture is ready for combined reports – cross-analyzing results from MindPath 16, MindPath 5D, and Enneagram in a single "Personality Compass" PDF. The IntegrationEngine is already in place, waiting for content.

💡 Lessons Learned

📬 Share Your Feedback

I'd love to hear from you! Whether you have questions about the development, suggestions for new features, or just want to share your experience with the app, here's how you can reach me:

💬 Questions for the community:

  • Have you built offline-first apps? What were your biggest challenges?
  • Would you use a tool like this for team-building, coaching, or personal growth?
  • How important is privacy to you when using personality tests?

Share your thoughts via email or LinkedIn — I read and respond to every message!

🔗 Download Personality Compass

Try Personality Compass Today

Discover your personality type with 454 questions across 3 psychological models. 100% offline, complete privacy, professional PDF reports.

Download Now
"Know yourself — and you will know the entire universe"