How Aquarium Architect works.
A compatibility checker for freshwater, brackish, and saltwater aquariums — including reef tanks with corals, anemones, and clams. Curated, hand-tuned, and source-credible.
What this does
You build a hypothetical tank — pick the water type, set the volume, add fish and corals. The engine checks the stocking against 252+ species and 59+ corals worth of rules, then tells you what will work and what won't. Every warning explains why: temperature mismatch, predation, fin-nipping, schooling minimums, tank size, water chemistry, reef-safe behaviour, coral conflicts, anemone stings, light/flow requirements, growth horizons.
It's free, anonymous-by-default, and works on mobile. Optional sign-in syncs your tanks across devices via Supabase.
The compatibility engine
The engine lives in src/lib/compatibility.ts. It's a pure function — input a tank, output a list of severity-tagged issues (critical, warn, good, info) plus stats. No I/O, no side effects, all rules are data-driven.
Active rules include:
- Schooling minimums per species — if the schooler needs 6 and you have 2, it flags.
- Water-type matching on a three-tier ladder (fresh → brackish → salt). Adjacent mismatches warn; skip-tier mismatches fire critical.
- Reef-safe enforcement — coral-nipping fish in a reef tank fire critical with named species.
- Light + flow capability matchingfor corals against the tank's declared lighting and flow.
- Hard-pair lookups — curated [fish, fish, reason]or [coral, coral, reason] tuples for known killer combos. Hard-pair messages dedupe generic rules (when a hard pair fires, the temp/pH/aggression rules skip for that pair so the report stays clean).
- Predation by adult size, fin-nipper × long-finned, aggressive × peaceful bullying, predatory anemones, multiple male bettas, goldfish bioload.
- Tank size + growth horizon — undersized tank → critical, with juvenile-to-adult time clauses for fish that have growth data.
- Stocking density — freshwater 1″/gal, salt FOWLR/reef 0.75″/gal, SPS-heavy 0.5″/gal. Heavy planting + oversized filtration loosen the freshwater threshold.
- Tank shape — optional length × width × height. Active swimmers (8″+) flag when length is below 4× their adult size.
Where the species data comes from
The fish database lives in src/data/fish.json and the coral database in src/data/corals.json — version-controlled, hand-curated JSON. Each entry was researched against a combination of:
- Reputable hobbyist and academic references: FishBase (fishbase.se), SeriouslyFish (seriouslyfish.com), Reef Builders, Reef2Reef community articles
- Long-standing reefer + aquarist consensus on documented species like Bob Fenner's "The Conscientious Marine Aquarist" for marines and Diana Walstad's "Ecology of the Planted Aquarium" for freshwater planted tanks
- Documented behavioural notes from public-aquarium husbandry teams (Steinhart, Monterey Bay Aquarium, Shedd) where available
- Author's own keeping experience and verified community reports
Photos are sourced from Wikimedia Commons under Creative Commons licenses (CC-BY, CC-BY-SA, CC0). Every photo is credited on the per-species page and on the master credits page.
We do not claim peer-reviewed accuracy. We claim "curated by people who keep fish, cross-checked against the references above, and corrected when wrong." If you find an error, please tell us (next section).
How to suggest corrections
Use the feedback page. Pick a type — correction, suggestion, bug, or other — write what's wrong or what you'd like to see, and submit. Submissions go straight to the maintainer, who reviews them in batches (usually within a week). Leave an optional contact email if you want a reply.
For corrections, be specific: name the species, say what's wrong (the pH range, the schooling minimum, the temperament, the photo), and cite a source if you have one (FishBase, SeriouslyFish, your own long-term keeping experience). The more concrete the report, the faster the fix.
Privacy + data handling
Anonymous use stores everything in your browser's localStorage — nothing leaves your device. If you sign in, your tank data syncs via Supabase, scoped per-user with row-level security. Email is required for sign-in; password recovery is handled by Supabase.
Vercel Analytics is enabled for aggregate pageview + custom-event data (tank created, preset loaded, share-link copied). No personally identifiable information is collected. No third-party tracking.
What this isn’t
Aquarium Architect is heuristic guidance, not a substitute for the careful personal judgement of an experienced fishkeeper. Individual fish have individual personalities. Real-world tank parameters drift. A rule that says "X works" means the population-level data supports it, not that every X will work in every tank.
When in doubt, verify with a long-time reefer, a planted-tank veteran, or your local fish store with a track record. We're building this tool to make the homework easier — not to replace it.