Executive Summary
Drevo is a modern genealogy platform built as a serious alternative to Ancestry.com and MyHeritage. It combines Drupal 11 content management with a real-time GraphQL API, SVG/d3.js visualizations, AI-powered biography generation, GEDCOM import/export, collaborative editing, Stripe billing infrastructure, webhooks, and a REST API — all delivered globally via Cloudflare CDN at sub-120ms response times.
The platform shipped 32+ features across Q1–Q4 2026. It is live, indexed, and serving real users. The demo dataset includes 362 historical persons across 20 royal dynasties (Windsor, Romanov, Habsburg, Bourbon, Medici, Plantagenet, Tudor, Stuart, Hohenzollern, and more) — each with full relationship graphs spanning 9+ centuries.
Infrastructure & Performance
Production stack on odin.artlogic.studio VPS
10 Custom Drupal Modules
All built from scratch — zero contrib dependencies for core features
drevo_auth
OAuth 2.0 — Google & GitHub authorization code flow. Custom login/register/logout pages. Auto-creates Drupal accounts on first social login. State param CSRF protection.
drevo_pages
All page controllers + routing. WebP auto-conversion hook_file_insert/update. Email invite via hook_mail. Timeline, invite, PDF export, ancestor match routes.
drevo_graphql
SDL-first GraphQL schema (GraphQL 4.x module). Custom DataProducers for persons, trees, relationships. Mutations for create/update. Caching via Drupal cache API.
drevo_user
EditPersonForm — full media upload UI. field_photo managed_file, field_gallery (20 images), field_video_url (3 URLs). File permanence handler. Biography field.
drevo_gedcom
GEDCOM 5.5/5.5.1 parser — INDI/FAM records, CONC/CONT lines, slash name cleanup. Import controller + export endpoint returning .ged file download.
drevo_ai
Anthropic Claude API integration. Generate biography button on person nodes (owners/admins only). Admin config at /admin/config/drevo/ai-settings.
drevo_notify
PostgreSQL notifications table. Injectable NotifyService. Bell icon in navbar with 60s polling. Full /notifications page. Mark read (single + bulk).
drevo_rest
REST/JSON API — GET /api/v1/persons, /api/v1/persons/{id}, /api/v1/trees, /api/v1/trees/{id}. CORS headers. Query params: tree_id, gender, search, limit, offset.
drevo_webhooks
Webhook registry table. /api/webhooks/register endpoint. hook_node_insert/update dispatches events (person.created, person.updated) with HMAC-SHA256 signatures.
drevo_billing
Stripe payment infrastructure. /pricing page, /billing/checkout/{plan}, /billing/success, /billing/cancel. Stripe webhook handler. Subscription table. Pro & Institution plan roles.
32+ Shipped Features
Across Q1–Q4 2026
Core Platform
Authentication & Accounts
Media & Content
Visualization
Collaboration
Notifications & Webhooks
PWA & Mobile
Billing & Payments
Performance
All Live Endpoints
drevo.artlogic.studio — all routes tested and returning correct status codes
/
GET
Homepage — hero, features, pricing, roadmap, API preview
/explore
GET
Browse all dynasty trees with person counts
/royal-family
GET
British Royal Family interactive d3.js tree
/timeline
GET
Dynasty timeline with historical events overlay
/login
GET
OAuth (Google/GitHub) + native login page
/register
GET
Registration page
/auth/google
GET
OAuth redirect to Google (302)
/auth/github
GET
OAuth redirect to GitHub (302)
/auth/logout
GET
Logout + redirect to /
/my-tree
GET
Personal tree dashboard (auth required)
/my-tree/{id}/invite
POST
Invite collaborator by email (auth)
/my-tree/{id}/export-pdf
GET
Memory Book HTML-to-PDF (auth)
/my-tree/{id}/gedcom-import
POST
GEDCOM .ged file upload (auth)
/my-tree/{id}/gedcom-export
GET
GEDCOM .ged file download (auth)
/my-tree/{id}/webhooks
GET
Webhook management (auth)
/invite/{token}
GET
Accept collaboration invite
/notifications
GET
In-app notification center (auth)
/pricing
GET
Standalone pricing & upgrade page
/billing/checkout/{plan}
GET
Stripe Checkout Session redirect (auth)
/billing/success
GET
Payment success confirmation
/billing/cancel
GET
Payment cancelled page
/billing/portal
GET
Stripe billing portal (auth)
/report
GET
This project report page
/graphql/drevo
POST
GraphQL API — full schema
/api/v1/persons
GET
REST: list persons (filter: tree_id, gender, search, limit)
/api/v1/persons/{id}
GET
REST: single person with relations
/api/v1/trees
GET
REST: list all public trees
/api/v1/trees/{id}
GET
REST: single tree with persons
/api/trees
GET
Trees JSON (cached 5 min) — used by timeline
/api/ancestor-match
GET
Cross-tree surname matching (auth)
/api/notifications/count
GET
Unread notifications count JSON
/api/notifications/read/{nid}
POST
Mark notification as read (auth)
/api/webhooks/register
POST
Register new webhook endpoint (auth)
/api/stripe/webhook
POST
Stripe event receiver (HMAC-verified)
/api/ai/generate-biography
POST
Claude API biography generation (auth)
/admin/config/drevo/ai-settings
GET
Configure Anthropic API key
/manifest.json
GET
PWA manifest
/sw.js
GET
Service Worker
/api/docs
GET
API documentation page
Demo Dataset — 362 Historical Persons
20 royal dynasties · 9 centuries of history · Real Wikipedia portrait photos
Why Drevo Beats the Competition
vs Ancestry.com · MyHeritage · FamilySearch · Geneanet
Pricing Structure
Three tiers, each with a clear mission
Annual billing saves 20% · Student & nonprofit discounts available · No credit card for Free plan
Roadmap Status
Remaining Configuration
Manual steps to enable all paid features