The content model
There are exactly three entity categories. Keeping the set closed is what makes the directory easy to search, easy to link and easy to describe to a search engine. The subtype is a field on the record, never a fourth category.
- Person, schema.org Person. Subtype field
role: founder, author, writer, CEO or investor. - Organization, schema.org Organization with an
additionalType. Subtype fieldorg_type: company, startup, VC, accelerator, NGO, college or government, mapped to https://schema.org/Corporation, https://schema.org/FinancialService, https://schema.org/Organization, https://schema.org/NGO, https://schema.org/CollegeOrUniversity, https://schema.org/GovernmentOrganization. - Place, schema.org Place with an
additionalType. Subtype fieldplace_type: city, state, country or area, mapped to https://schema.org/City, https://schema.org/AdministrativeArea, https://schema.org/Country.
One schema type is one category and never two. An organization is never typed as a Person, and a place never borrows the Organization type, so no page can claim a type that belongs to another category.
Permalinks
Permalinks are short, lowercase and hyphenated, with no trailing slash and no id in the URL. A number in a path is a link that breaks the moment a database is migrated, so ids never appear.
/person/<slug>, for example /person/nithin-kamath/organization/<slug>, for example /organization/zerodha/place/<slug>, for example /place/bengaluru
The category hub for each of the three is the singular prefix itself: /person, /organization and /place. Those are the pages the breadcrumb trail and the structured data point at, so no crumb ever leads to a page that does not exist.
When two records share a name, the slug carries a qualifier: the city for a person or an organization, the kind of area for a place. /place/bengaluru-rural is the district and /place/bengaluru is the city, and the two stay readable and distinct.
A rename never breaks a link. The old slug is recorded on the record and answered with a permanent redirect, so /organization/zerodha-broking-ltd redirects to /organization/zerodha with HTTP 301.
Structured data
Every entry emits one JSON-LD block containing the entity, the page, the breadcrumb trail and the site. Person entries carry birth place, education, employer and known topics. Organization entries carry founding date, founders, industry, employee count and address. Place entries carry coordinates, the areas they sit inside and population. Each record also keeps sameAs links (website, LinkedIn, X, Wikidata), which is the hook the Knowledge Graph reads.
Images
Every entity has an image field: a logo for an organization, a portrait for a person, a hero shot for a place. An entry without an image shows an initials tile instead of a grey box, and the image control on the submit form previews the crop in the exact aspect ratio the entry page uses.
Advertising
Image advertisements are described in one config file (lib/ads.ts) and rendered by one component. Every slot is labelled Advertisement, reserves its space with a fixed aspect ratio so nothing shifts on load, lazy loads the creative, and can be switched off per page from config.
Verification and review
A verified entry has been checked by the team and carries a lime badge. Claim requests and new entries both land in the same review queue, and an admin approves or rejects each one before it changes what the site shows.
Editing without a rebuild
Every cached unit of content carries a tag: one tag per entity page, one per category list, and one each for the header and the footer. A publish event calls POST /api/revalidate with the tags it touched, so a single page or just the chrome refreshes on the next request, and the site is never rebuilt end to end. ARCHITECTURE.md carries the full contract.
About this build
The data currently comes from a JSON seed of 9 real Indian entities, images and advertisements are branded placeholders, the request queue is a file on disk, and the admin password is a single value in an environment file. The pages, the routes, the structured data and the permalink scheme are real and ready to be pointed at a database.
Canonical origin for this build: https://hoodpedia.com.
