This is a Next.js project bootstrapped with create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen http://localhost:3000 with your browser to see the result.
You can start editing the page by modifying app/page.tsx. The page auto-updates as you edit the file.
This project uses next/font to automatically optimize and load Geist, a new font family for Vercel.
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.
This project supports GA4 to track visits and geography.
-
Create a GA4 property and web data stream. Copy the Measurement ID (looks like
G-XXXXXXX). -
Set the environment variable locally or in your hosting provider:
NEXT_PUBLIC_GA_MEASUREMENT_ID=G-XXXXXXX
You can use .env.local during development. See .env.local.example.
- The app automatically loads GA and tracks route changes. No additional setup is needed.
Notes:
- GA4 reports: Acquisition (source/medium/referrals) and Demographics (country/city).
- GA4 does not identify individual users; data is aggregate. Ensure cookie/consent compliance as required.
Generate the NCBI Taxonomy hierarchy used by the hidden phyletic-distribution tool:
npm run generate:phyletic-treeThe taxonomy covers every organism in the searched database, the 2,760 NCBI
taxIDs of the UniProt 2025_02 eukaryotic reference proteome set, including
organisms in which no family was found (a taxon with no counts row has no hits
in any family). taxonomy_eukaryotes_filtered.json is built from that taxID
list with scripts/ncbi_taxonomy_create.py and the NCBI taxonomy dump of
September 2025. TaxID 1450536, since merged by NCBI into 856835
(Guyanagaster necrorhizus), is placed at 856835 and keeps its searched ID.
The page can switch to the Open Tree of Life reference taxonomy (OTT 3.7.3),
served as taxonomy_ott.json, taxonomy_ott.nwk and
taxonomy_ott.tree-order.json in the same formats. It is matched to the same
taxIDs through OTT's ncbi: source identifiers and places 2,662 of the 2,760;
the 98 OTT has no NCBI mapping for are absent from that view. The OTT files are
not made by generate:phyletic-tree: OTT's rank labels do not nest (an unranked
group can sit above a larger "order"), so rebuilding the nesting from flat rank
columns fails, and the newick is written from the OTT hierarchy itself with
internal nodes labelled rank__name like the NCBI tree. Both sets of files are
built by build_taxonomy_trees.py in the GPCR superfamily analysis (step 7).
The generator reads
public/phyletic-distribution/taxonomy_eukaryotes_filtered.json and writes
public/phyletic-distribution/taxonomy_eukaryotes_filtered.nwk plus
public/phyletic-distribution/taxonomy_eukaryotes_filtered.tree-order.json.
- Newick tips are NCBI taxIDs so they map directly to visualization records.
- Every populated taxonomy field is retained, including
Cellular Root, all named ranks,CladethroughClade 21, andNo RankthroughNo Rank 3. Empty andNAvalues never create nodes. - Because the JSON stores ranked and unranked fields in separate flattened columns, groups are nested by containment of their sampled descendant taxa. Repeated names in different lineages are separated by broader context.
- Multifurcations are preserved as nodes with any number of children; the tree is never forced into a binary topology.
- The companion order file is the authoritative leaf order used by the visualization, preventing the taxonomy bars and tree tips from diverging.
- Branch lengths are layout distances, not evolutionary distances. The whole hierarchy is stretched to the available height; lineages may contain different numbers of populated taxonomy layers while all tips stay aligned.
For future visualization, prune the tree by visible taxID tips and retain child arrays of arbitrary length. The NCBI tree should be described as a taxonomy hierarchy and displayed as a cladogram by default.