<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Apphesus OÜ | Intelligent Mobile Experiences</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;1,9..40,300&display=swap" rel="stylesheet">
<style>
:root {
--ink: #0a0a0f;
--paper: #f7f5f0;
--accent: #e8401c;
--accent2: #1c6fe8;
--muted: #7a7a8a;
--card: #ffffff;
--border: rgba(10,10,15,0.08);
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: 'DM Sans', sans-serif;
background: var(--paper);
color: var(--ink);
line-height: 1.65;
overflow-x: hidden;
}
/* ── NAV ── */
nav {
position: fixed; top: 0; left: 0; right: 0;
z-index: 100;
display: flex; justify-content: space-between; align-items: center;
padding: 1.25rem 3rem;
background: rgba(247,245,240,0.85);
backdrop-filter: blur(12px);
border-bottom: 1px solid var(--border);
}
.nav-logo {
font-family: 'Syne', sans-serif;
font-weight: 800;
font-size: 1.25rem;
letter-spacing: -0.02em;
color: var(--ink);
text-decoration: none;
}
.nav-logo span { color: var(--accent); }
.nav-links { display: flex; gap: 2rem; list-style: none; }
.nav-links a {
text-decoration: none;
font-size: 0.875rem;
font-weight: 500;
color: var(--muted);
transition: color 0.2s;
}
.nav-links a:hover { color: var(--ink); }
/* ── HERO ── */
.hero {
min-height: 100vh;
display: grid;
grid-template-columns: 1fr 1fr;
padding: 7rem 3rem 4rem;
gap: 3rem;
align-items: center;
position: relative;
overflow: hidden;
}
.hero::before {
content: '';
position: absolute;
top: -20%; right: -10%;
width: 600px; height: 600px;
border-radius: 50%;
background: radial-gradient(circle, rgba(28,111,232,0.08) 0%, transparent 70%);
pointer-events: none;
}
.hero::after {
content: '';
position: absolute;
bottom: 5%; left: 10%;
width: 400px; height: 400px;
border-radius: 50%;
background: radial-gradient(circle, rgba(232,64,28,0.06) 0%, transparent 70%);
pointer-events: none;
}
.hero-text { max-width: 560px; }
.hero-eyebrow {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.12em;
text-transform: uppercase;
color: var(--accent);
margin-bottom: 1.5rem;
}
.hero-eyebrow::before {
content: '';
display: block;
width: 24px; height: 2px;
background: var(--accent);
}
.hero h1 {
font-family: 'Syne', sans-serif;
font-size: clamp(2.8rem, 5vw, 4.5rem);
font-weight: 800;
line-height: 1.05;
letter-spacing: -0.03em;
margin-bottom: 1.5rem;
}
.hero h1 em {
font-style: normal;
color: var(--accent);
}
.hero-sub {
font-size: 1.1rem;
color: var(--muted);
font-weight: 300;
max-width: 460px;
margin-bottom: 2.5rem;
}
.hero-actions { display: flex; gap: 1rem; flex-wrap: wrap; }
.btn-primary {
display: inline-block;
padding: 0.85rem 1.75rem;
background: var(--ink);
color: var(--paper);
border-radius: 0.375rem;
text-decoration: none;
font-weight: 600;
font-size: 0.9rem;
letter-spacing: 0.01em;
transition: transform 0.2s, box-shadow 0.2s;
}
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(10,10,15,0.2); }
.btn-secondary {
display: inline-block;
padding: 0.85rem 1.75rem;
background: transparent;
color: var(--ink);
border: 1.5px solid var(--ink);
border-radius: 0.375rem;
text-decoration: none;
font-weight: 600;
font-size: 0.9rem;
transition: background 0.2s, color 0.2s;
}
.btn-secondary:hover { background: var(--ink); color: var(--paper); }
/* hero visual */
.hero-visual {
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.orbit-ring {
position: relative;
width: 380px; height: 380px;
}
.orbit-center {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
width: 120px; height: 120px;
border-radius: 28px;
background: var(--ink);
display: flex; align-items: center; justify-content: center;
font-family: 'Syne', sans-serif;
font-size: 2rem;
box-shadow: 0 20px 60px rgba(10,10,15,0.25);
}
.orbit-track {
position: absolute; inset: 0;
border-radius: 50%;
border: 1.5px dashed var(--border);
animation: spin 18s linear infinite;
}
.orbit-track-2 {
position: absolute; inset: 40px;
border-radius: 50%;
border: 1.5px dashed rgba(28,111,232,0.18);
animation: spin 12s linear infinite reverse;
}
@keyframes spin { to { transform: rotate(360deg); } }
.orbit-dot {
position: absolute;
width: 48px; height: 48px;
border-radius: 12px;
display: flex; align-items: center; justify-content: center;
font-size: 1.4rem;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
animation: counter-spin 18s linear infinite;
}
@keyframes counter-spin { to { transform: rotate(-360deg); } }
.dot-1 { top: -24px; left: 50%; margin-left: -24px; background: #fff0ed; animation-duration: 18s; }
.dot-2 { right: -24px; top: 50%; margin-top: -24px; background: #edf4ff; animation-duration: 18s; }
.dot-3 { bottom: -24px; left: 50%; margin-left: -24px; background: #f0fdf4; animation-duration: 18s; }
.dot-4 { left: -24px; top: 50%; margin-top: -24px; background: #fefce8; animation-duration: 18s; }
/* ── FEATURED BADGE ── */
.eu-badge {
max-width: 1100px;
margin: 0 auto;
padding: 0 3rem;
}
.eu-badge-inner {
background: linear-gradient(135deg, var(--ink) 0%, #1a1a2e 100%);
border-radius: 1rem;
padding: 2.5rem 3rem;
display: flex;
gap: 3rem;
align-items: center;
color: #fff;
margin-bottom: 5rem;
}
.eu-badge-icon {
font-size: 3rem;
flex-shrink: 0;
}
.eu-badge-text h3 {
font-family: 'Syne', sans-serif;
font-size: 1.25rem;
font-weight: 700;
margin-bottom: 0.4rem;
}
.eu-badge-text p { font-size: 0.95rem; color: rgba(255,255,255,0.65); font-weight: 300; }
.eu-badge-tags {
margin-left: auto;
display: flex;
flex-direction: column;
gap: 0.5rem;
flex-shrink: 0;
}
.eu-tag {
padding: 0.35rem 0.9rem;
border: 1px solid rgba(255,255,255,0.2);
border-radius: 2rem;
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.05em;
color: rgba(255,255,255,0.75);
}
/* ── SECTIONS ── */
section {
max-width: 1100px;
margin: 0 auto;
padding: 0 3rem 5rem;
}
.section-label {
display: inline-flex; align-items: center; gap: 0.5rem;
font-size: 0.7rem; font-weight: 700; letter-spacing: 0.15em; text-transform: uppercase;
color: var(--muted); margin-bottom: 0.75rem;
}
.section-label::after {
content: '';
display: block; width: 32px; height: 1.5px;
background: var(--muted);
}
.section-title {
font-family: 'Syne', sans-serif;
font-size: clamp(1.8rem, 3vw, 2.75rem);
font-weight: 800;
letter-spacing: -0.03em;
line-height: 1.1;
margin-bottom: 1rem;
}
.section-desc { color: var(--muted); font-weight: 300; max-width: 520px; }
/* CAPABILITIES GRID */
.cap-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5px;
background: var(--border);
border-radius: 1rem;
overflow: hidden;
margin-top: 3rem;
}
.cap-card {
background: var(--card);
padding: 2rem 1.75rem;
transition: background 0.2s;
}
.cap-card:hover { background: #fafaf8; }
.cap-card.featured {
background: var(--ink);
color: #fff;
}
.cap-card.featured .cap-icon { background: rgba(255,255,255,0.1); }
.cap-card.featured .cap-desc { color: rgba(255,255,255,0.6); }
.cap-card.featured .cap-tag { border-color: rgba(255,255,255,0.2); color: rgba(255,255,255,0.7); }
.cap-icon {
width: 44px; height: 44px;
border-radius: 10px;
background: var(--paper);
display: flex; align-items: center; justify-content: center;
font-size: 1.3rem;
margin-bottom: 1.25rem;
}
.cap-name {
font-family: 'Syne', sans-serif;
font-size: 1.05rem;
font-weight: 700;
margin-bottom: 0.5rem;
}
.cap-desc { font-size: 0.875rem; color: var(--muted); line-height: 1.6; font-weight: 300; }
.cap-tag {
display: inline-block;
margin-top: 1rem;
padding: 0.25rem 0.65rem;
border: 1px solid var(--border);
border-radius: 2rem;
font-size: 0.7rem;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--muted);
}
/* AI LEARNING SECTION */
.learning-section { padding-bottom: 5rem; }
.learning-layout {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: start;
margin-top: 3rem;
}
.learning-pillars { display: flex; flex-direction: column; gap: 1.5px; }
.pillar {
background: var(--card);
border-radius: 0;
padding: 1.5rem 2rem;
display: flex;
gap: 1.25rem;
align-items: flex-start;
border-left: 3px solid transparent;
transition: border-color 0.2s, background 0.2s;
cursor: default;
}
.pillar:first-child { border-radius: 0.75rem 0.75rem 0 0; }
.pillar:last-child { border-radius: 0 0 0.75rem 0.75rem; }
.pillar:hover { border-left-color: var(--accent); background: #fff; }
.pillar-num {
font-family: 'Syne', sans-serif;
font-size: 2rem;
font-weight: 800;
color: var(--border);
line-height: 1;
flex-shrink: 0;
}
.pillar h4 {
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 0.95rem;
margin-bottom: 0.3rem;
}
.pillar p { font-size: 0.85rem; color: var(--muted); font-weight: 300; }
.learning-panel {
background: var(--ink);
border-radius: 1rem;
padding: 2.5rem;
color: #fff;
position: sticky;
top: 6rem;
}
.learning-panel h3 {
font-family: 'Syne', sans-serif;
font-size: 1.35rem;
font-weight: 800;
margin-bottom: 0.75rem;
}
.learning-panel p { font-size: 0.9rem; color: rgba(255,255,255,0.6); font-weight: 300; margin-bottom: 2rem; }
.stat-row { display: flex; flex-direction: column; gap: 1.5rem; }
.stat-item {}
.stat-val {
font-family: 'Syne', sans-serif;
font-size: 2.2rem;
font-weight: 800;
line-height: 1;
color: var(--accent);
}
.stat-label { font-size: 0.8rem; color: rgba(255,255,255,0.5); margin-top: 0.25rem; }
.stat-divider { width: 100%; height: 1px; background: rgba(255,255,255,0.08); }
/* TECH STACK */
.tech-grid {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
margin-top: 2rem;
}
.tech-chip {
padding: 0.5rem 1.1rem;
background: var(--card);
border: 1.5px solid var(--border);
border-radius: 2rem;
font-size: 0.8rem;
font-weight: 600;
color: var(--ink);
transition: border-color 0.2s, transform 0.2s;
}
.tech-chip:hover { border-color: var(--accent2); transform: translateY(-2px); }
.tech-chip.highlight {
background: var(--ink);
color: var(--paper);
border-color: var(--ink);
}
/* PROJECTS */
.project-list { display: flex; flex-direction: column; gap: 1.5px; margin-top: 2.5rem; }
.project-item {
background: var(--card);
padding: 1.75rem 2rem;
display: flex; align-items: center; gap: 1.5rem;
cursor: default;
transition: background 0.2s;
}
.project-item:first-child { border-radius: 0.75rem 0.75rem 0 0; }
.project-item:last-child { border-radius: 0 0 0.75rem 0.75rem; }
.project-item:hover { background: #fafaf8; }
.project-emoji { font-size: 1.75rem; flex-shrink: 0; }
.project-info { flex: 1; }
.project-info h4 {
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 1rem;
margin-bottom: 0.2rem;
}
.project-info p { font-size: 0.85rem; color: var(--muted); font-weight: 300; }
.project-tags { display: flex; gap: 0.5rem; flex-shrink: 0; }
.ptag {
padding: 0.2rem 0.65rem;
border-radius: 2rem;
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.ptag-ios { background: #edf4ff; color: var(--accent2); }
.ptag-android { background: #f0fdf4; color: #16a34a; }
.ptag-ai { background: #fff0ed; color: var(--accent); }
.ptag-learning { background: #fef9c3; color: #a16207; }
/* CTA */
.cta-block {
background: linear-gradient(135deg, #e8401c 0%, #c0300f 100%);
border-radius: 1rem;
padding: 4rem 3rem;
text-align: center;
color: #fff;
}
.cta-block h2 {
font-family: 'Syne', sans-serif;
font-size: clamp(1.8rem, 3vw, 2.5rem);
font-weight: 800;
letter-spacing: -0.02em;
margin-bottom: 1rem;
}
.cta-block p { color: rgba(255,255,255,0.7); font-weight: 300; margin-bottom: 2rem; max-width: 500px; margin-left: auto; margin-right: auto; }
.btn-white {
display: inline-block;
padding: 0.9rem 2rem;
background: #fff;
color: var(--accent);
border-radius: 0.5rem;
text-decoration: none;
font-weight: 700;
font-size: 0.9rem;
transition: transform 0.2s, box-shadow 0.2s;
}
.btn-white:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(0,0,0,0.2); }
/* FOOTER */
footer {
border-top: 1px solid var(--border);
padding: 2.5rem 3rem;
display: flex;
justify-content: space-between;
align-items: center;
max-width: 1100px;
margin: 0 auto;
font-size: 0.85rem;
color: var(--muted);
}
.footer-logo {
font-family: 'Syne', sans-serif;
font-weight: 800;
color: var(--ink);
}
.footer-logo span { color: var(--accent); }
/* ANIMATIONS */
@keyframes fade-up {
from { opacity: 0; transform: translateY(24px); }
to { opacity: 1; transform: translateY(0); }
}
.hero-text > * {
animation: fade-up 0.6s ease both;
}
.hero-eyebrow { animation-delay: 0.1s; }
.hero h1 { animation-delay: 0.2s; }
.hero-sub { animation-delay: 0.3s; }
.hero-actions { animation-delay: 0.4s; }
.hero-visual { animation: fade-up 0.8s 0.3s ease both; }
/* RESPONSIVE */
@media (max-width: 768px) {
nav { padding: 1rem 1.5rem; }
.nav-links { display: none; }
.hero { grid-template-columns: 1fr; padding: 6rem 1.5rem 3rem; }
.hero-visual { display: none; }
section { padding: 0 1.5rem 4rem; }
.eu-badge { padding: 0 1.5rem; }
.eu-badge-inner { flex-direction: column; gap: 1.5rem; }
.eu-badge-tags { margin-left: 0; flex-direction: row; flex-wrap: wrap; }
.cap-grid { grid-template-columns: 1fr; }
.learning-layout { grid-template-columns: 1fr; }
.learning-panel { position: static; }
footer { flex-direction: column; gap: 1rem; text-align: center; }
}
</style>
</head>
<body>
<!-- NAV -->
<nav>
<a href="#" class="nav-logo">Apphesus<span>.</span></a>
<ul class="nav-links">
<li><a href="#capabilities">Capabilities</a></li>
<li><a href="#learning">AI Learning</a></li>
<li><a href="#stack">Technology</a></li>
<li><a href="#work">Portfolio</a></li>
<li><a href="mailto:[email protected]">Contact</a></li>
</ul>
</nav>
<!-- HERO -->
<header class="hero">
<div class="hero-text">
<span class="hero-eyebrow">Tallinn, Estonia · Est. Apphesus OÜ</span>
<h1>Mobile intelligence,<br><em>human-centered</em><br>learning.</h1>
<p class="hero-sub">We build AI-driven mobile applications — from consumer apps to personalized educational platforms — that adapt, grow, and deliver measurable outcomes.</p>
<div class="hero-actions">
<a href="mailto:[email protected]" class="btn-primary">Start a conversation</a>
<a href="#learning" class="btn-secondary">EU Project scope</a>
</div>
</div>
<div class="hero-visual">
<div class="orbit-ring">
<div class="orbit-track"></div>
<div class="orbit-track-2"></div>
<div class="orbit-center">🧠</div>
<div class="orbit-dot dot-1">📱</div>
<div class="orbit-dot dot-2">🎯</div>
<div class="orbit-dot dot-3">📊</div>
<div class="orbit-dot dot-4">⚡</div>
</div>
</div>
</header>
<!-- EU BADGE -->
<div class="eu-badge">
<div class="eu-badge-inner">
<div class="eu-badge-icon">🇪🇺</div>
<div class="eu-badge-text">
<h3>EU-Aligned · AI-Powered Personalized Learning</h3>
<p>Apphesus is well-positioned to deliver on the European Digital Education Action Plan — combining adaptive AI, mobile-first delivery, and learner-centred design.</p>
</div>
<div class="eu-badge-tags">
<span class="eu-tag">Horizon-Ready</span>
<span class="eu-tag">GDPR-Compliant</span>
<span class="eu-tag">EdTech</span>
</div>
</div>
</div>
<!-- CAPABILITIES -->
<section id="capabilities">
<span class="section-label">What we do</span>
<h2 class="section-title">Full-spectrum mobile<br>expertise.</h2>
<p class="section-desc">From concept to the App Store — and from individual apps to multi-stakeholder EU-funded projects.</p>
<div class="cap-grid">
<div class="cap-card featured">
<div class="cap-icon">🤖</div>
<div class="cap-name">AI-Powered Learning</div>
<p class="cap-desc">Personalized learning path engines powered by LLMs, knowledge graphs, and adaptive assessment loops. Learner profiling, spaced repetition, and real-time curriculum adjustment.</p>
<span class="cap-tag">Core capability</span>
</div>
<div class="cap-card">
<div class="cap-icon">📱</div>
<div class="cap-name">Mobile Engineering</div>
<p class="cap-desc">Native iOS (Swift), Android (Kotlin) and cross-platform (React Native) development for consumer-grade performance at scale.</p>
<span class="cap-tag">Swift · Kotlin · RN</span>
</div>
<div class="cap-card">
<div class="cap-icon">📈</div>
<div class="cap-name">Growth & Monetisation</div>
<p class="cap-desc">App Store Optimisation, subscription funnel design, A/B testing frameworks and analytics pipelines that turn downloads into revenue.</p>
<span class="cap-tag">ASO · Analytics</span>
</div>
<div class="cap-card">
<div class="cap-icon">🎯</div>
<div class="cap-name">Personalisation Engines</div>
<p class="cap-desc">Recommendation systems and user-modelling pipelines that adapt content, pacing, and difficulty to individual learner needs in real time.</p>
<span class="cap-tag">ML · RecSys</span>
</div>
<div class="cap-card">
<div class="cap-icon">🔬</div>
<div class="cap-name">EdTech Consulting</div>
<p class="cap-desc">Instructional design partnerships, learning outcome definition, and measurable KPI frameworks aligned with EU Digital Education standards.</p>
<span class="cap-tag">Curriculum Design</span>
</div>
<div class="cap-card">
<div class="cap-icon">🔄</div>
<div class="cap-name">App Lifecycle & M&A</div>
<p class="cap-desc">Own, operate, and strategically divest mobile titles. Full due-diligence support and acqui-hire expertise for app portfolio transactions.</p>
<span class="cap-tag">M&A · Divestiture</span>
</div>
</div>
</section>
<!-- AI LEARNING -->
<section id="learning" class="learning-section">
<span class="section-label">AI Learning Path</span>
<h2 class="section-title">How we build adaptive<br>learning experiences.</h2>
<p class="section-desc">Our methodology for AI-powered personalized learning is grounded in cognitive science and validated through shipped products.</p>
<div class="learning-layout">
<div class="learning-pillars">
<div class="pillar">
<span class="pillar-num">01</span>
<div>
<h4>Learner Profiling & Diagnostics</h4>
<p>Dynamic onboarding assessments establish prior knowledge, learning style preferences, and goal alignment before any content is served.</p>
</div>
</div>
<div class="pillar">
<span class="pillar-num">02</span>
<div>
<h4>Knowledge Graph Construction</h4>
<p>Subject matter is modelled as a graph of interconnected concepts with prerequisite relationships, enabling fine-grained path generation.</p>
</div>
</div>
<div class="pillar">
<span class="pillar-num">03</span>
<div>
<h4>Adaptive Path Engine</h4>
<p>A reinforcement-learning-based engine continuously re-ranks and sequences content units based on learner performance signals and engagement data.</p>
</div>
</div>
<div class="pillar">
<span class="pillar-num">04</span>
<div>
<h4>Generative Content Augmentation</h4>
<p>LLMs synthesize context-specific examples, practice questions, and explanatory analogies tailored to each learner's profile and progress state.</p>
</div>
</div>
<div class="pillar">
<span class="pillar-num">05</span>
<div>
<h4>Spaced Repetition & Retention</h4>
<p>Scientifically calibrated review scheduling (SM-2 / Anki-derived algorithms) maximizes long-term retention with minimal study time.</p>
</div>
</div>
<div class="pillar">
<span class="pillar-num">06</span>
<div>
<h4>Analytics & Learning Outcomes</h4>
<p>Real-time dashboards for learners and administrators track mastery progress, time-to-competency, and learning outcome attainment against EU benchmarks.</p>
</div>
</div>
</div>
<div class="learning-panel">
<h3>Why Apphesus for your EU project</h3>
<p>We combine the agility of a specialist studio with the technical depth of a research-oriented team — ready to integrate into consortium-led EU projects.</p>
<div class="stat-row">
<div class="stat-item">
<div class="stat-val">EU-Based</div>
<div class="stat-label">Registered in Estonia, operating under EU jurisdiction</div>
</div>
<div class="stat-divider"></div>
<div class="stat-item">
<div class="stat-val">GDPR</div>
<div class="stat-label">Privacy-by-design approach; learner data sovereignty built-in</div>
</div>
<div class="stat-divider"></div>
<div class="stat-item">
<div class="stat-val">Full-Stack</div>
<div class="stat-label">End-to-end delivery: AI research → mobile app → analytics layer</div>
</div>
<div class="stat-divider"></div>
<div class="stat-item">
<div class="stat-val">Multilingual</div>
<div class="stat-label">i18n-first architecture for multi-country EU deployments</div>
</div>
</div>
</div>
</div>
</section>
<!-- TECH STACK -->
<section id="stack">
<span class="section-label">Technology</span>
<h2 class="section-title">The stack behind<br>our products.</h2>
<div class="tech-grid">
<span class="tech-chip highlight">Swift</span>
<span class="tech-chip highlight">Kotlin</span>
<span class="tech-chip highlight">React Native</span>
<span class="tech-chip highlight">Python</span>
<span class="tech-chip">PyTorch</span>
<span class="tech-chip">Hugging Face</span>
<span class="tech-chip">OpenAI API</span>
<span class="tech-chip">Anthropic Claude</span>
<span class="tech-chip">LangChain</span>
<span class="tech-chip">Neo4j (Knowledge Graphs)</span>
<span class="tech-chip">FastAPI</span>
<span class="tech-chip">PostgreSQL</span>
<span class="tech-chip">Firebase</span>
<span class="tech-chip">RevenueCat</span>
<span class="tech-chip">Amplitude</span>
<span class="tech-chip">Mixpanel</span>
<span class="tech-chip">AWS / GCP</span>
<span class="tech-chip">Docker · Kubernetes</span>
</div>
</section>
<!-- PORTFOLIO -->
<section id="work">
<span class="section-label">Portfolio</span>
<h2 class="section-title">Apps we've built<br>& shipped.</h2>
<div class="project-list">
<div class="project-item">
<span class="project-emoji">🧠</span>
<div class="project-info">
<h4>AdaptLearn — Personalized Skill Trainer</h4>
<p>Adaptive mobile learning app using knowledge graphs and spaced repetition. Configurable for any professional domain.</p>
</div>
<div class="project-tags">
<span class="ptag ptag-ios">iOS</span>
<span class="ptag ptag-android">Android</span>
<span class="ptag ptag-ai">AI</span>
<span class="ptag ptag-learning">EdTech</span>
</div>
</div>
<div class="project-item">
<span class="project-emoji">🎯</span>
<div class="project-info">
<h4>FocusFlow — Habit & Productivity Coach</h4>
<p>AI-driven daily planning assistant with personalized nudge algorithms and streak-based engagement.</p>
</div>
<div class="project-tags">
<span class="ptag ptag-ios">iOS</span>
<span class="ptag ptag-ai">AI</span>
</div>
</div>
<div class="project-item">
<span class="project-emoji">🌍</span>
<div class="project-info">
<h4>LinguaPath — Language Learning Engine</h4>
<p>LLM-powered conversational language tutor with adaptive vocabulary scheduling and pronunciation feedback.</p>
</div>
<div class="project-tags">
<span class="ptag ptag-ios">iOS</span>
<span class="ptag ptag-android">Android</span>
<span class="ptag ptag-ai">AI</span>
<span class="ptag ptag-learning">EdTech</span>
</div>
</div>
<div class="project-item">
<span class="project-emoji">📊</span>
<div class="project-info">
<h4>FinQuiz — Financial Literacy Trainer</h4>
<p>Gamified finance education app with personalised modules, assessments, and subscription monetisation.</p>
</div>
<div class="project-tags">
<span class="ptag ptag-ios">iOS</span>
<span class="ptag ptag-ai">AI</span>
<span class="ptag ptag-learning">EdTech</span>
</div>
</div>
</div>
</section>
<!-- CTA -->
<section>
<div class="cta-block">
<h2>Ready to build something<br>meaningful together?</h2>
<p>Whether you're launching a consumer app, applying to a European funding round, or building the next generation of AI-powered learning — let's talk.</p>
<a href="mailto:[email protected]" class="btn-white">Get in touch →</a>
</div>
</section>
<!-- FOOTER -->
<footer>
<span class="footer-logo">Apphesus<span>.</span></span>
<span>© 2025 Apphesus OÜ · Tallinn, Estonia</span>
<a href="mailto:[email protected]" style="color: var(--muted); text-decoration: none;">[email protected]</a>
</footer>
</body>
</html>