Bayramözü Village — Source-Based Village History and Digital Archive
A platform that brings together the history, archive documents and news of Bayramözü village in Kaman/Kırşehir, and connects villagers living elsewhere.

Description
A platform that brings together the history, archive documents and news of Bayramözü village in Kaman/Kırşehir, and connects villagers living elsewhere.
Case study
Challenge
The village's history was scattered across Ottoman registers, academic studies, cadastral records and oral accounts, and social media offered no permanent, sourced record. Documented facts had to be separated from claims, and data about living people had to be protected.
Approach
We built a data model that ties every record to a source citation and a verification level, and developed history, archive, place atlas, family tree, guestbook and contribution flows as 22 backend modules. Data protection rules were built into the schema and covered by negative tests, and all AI output requires editor approval.
Outcome
The platform is live at bayramozukoyu.com; the timeline, Ottoman register records, the 1,361-parcel village map and the family tree are in active use. Content keeps growing with new archive readings, while Oral Memory and Village Services await their first entries.
Tools
Next.js 16, React 19, TypeScript, Fastify, Drizzle ORM, MySQL, Bun, Nginx
Key Features
Village timeline with source citations and verification levels
Record groups from the 1838, 1840–41 and 1845 Ottoman registers
Leaflet Place Atlas: 1,361 cadastral parcels and place names
Searchable family tree showing deceased people only
Moderated village guestbook and private member messaging
Document/photo contributions, photo tagging and Honour Roll
AI Village Guide that cites its sources in every answer
Payment-free Village Services request referral
Separate admin panel with admin, editor and user roles
Technologies Used
Next.js 16
React 19
TypeScript
Fastify
Drizzle ORM
MySQL
Bun
Nginx
Design Highlights
Every fact is labelled verified, probable or under research
Mobile-first interface, three text sizes and read-aloud
Map data loads on visibility; page HTML shrank by roughly 86%
Conflicting family data is flagged as “uncertain”, never overwritten
Branding and village data live outside the code for easy reuse
Details
The Bayramözü Village Memory Atlas brings together the history, archive documents, place names, family records and oral accounts of a village in Kaman, Kırşehir, formerly known as Merdeşe, under one digital roof. It serves two audiences: villagers who live in cities or abroad and want to stay connected to their village, and researchers who want to learn about its past with proper sources. We designed and built the project as our own product and carried out the content research ourselves.
Context and need
The village's memory was scattered: Ottoman archive registers, academic theses, land registry records, old photographs and the stories of elders were disconnected from one another. Social media groups worked for sharing, but offered no permanent, searchable, sourced record. The real challenge was editorial rather than technical: when writing a village history, it has to be clear what is documented, what is probable and what is still an open question. Data about living people and family records was also sensitive under Turkish data protection law (KVKK).
Solution and scope
The platform is built on a data model that ties every piece of information to a source citation and a verification level (verified, probable, under research). The main sections visitors see:
- Timeline: from the 1530 tax survey entry to the present, with every line cited and labelled by verification level.
- Research articles and authors: sourced articles on the 1838 and 1840–41 population registers, the 1845 income survey, the 1952 fire at the Kaman civil registry and more; author profiles and article comments.
- Archive: population register scans, old photographs and place images. In the 1838 register, 114 entries were examined; the 108 entries with a name reading are published as a source group, and unreadable names were not filled in by guesswork.
- Place Atlas: a Leaflet-based village map with field and place names, 1,361 parcels compiled from the national cadastre, search by parcel number, historical place names and a detail page for every location.
- Family tree and cemetery: a zoomable tree drawn with d3-hierarchy; name and nickname search that tolerates Turkish characters, kinship paths and person cards. Only deceased people appear in the public tree.
- Village Guestbook: a moderated space for memories, greetings and replies; private messaging and blocking between members.
- Contribution flows: submitting documents, photos, memories or corrections; tagging people in photos; reporting places and family details. Contributions earn points and are acknowledged on an Honour Roll.
- Oral Memory and Village Guide: a submission flow for consented oral history recordings, and a Q&A guide that answers only from content published on the site and links each answer to its source.
- Village Services: a referral section that forwards requests for grave care, grave construction and village produce to the right person; it deliberately has no payment, cart or prices.
Admin panel
In a separate Next.js admin panel, editors and administrators manage history and article content, places (picking points directly on the map), family tree people, lineages and marriages, contributions, photo tags, oral memory recordings, guestbook moderation, the feedback inbox, service requests, point settings, user roles and site settings. Roles are split into administrator, editor and user. When conflicting information arrives for the family tree, the existing record is not overwritten: a conflict entry is opened, the field shows as “uncertain — under review” publicly, and an editor decides.
Technical architecture
The frontend is built with Next.js 16 and React 19, with server-side rendering. The API is a Fastify application running on Bun, split into 22 domain modules including guestbook, places, family tree, photo tags, oral memory, guide, points, newsletter, articles and phone login. Data lives in MySQL; schema changes are managed through ordered seed files rather than altering tables in place, so every installation can be rebuilt from the same schema. Shared concerns such as authentication, storage, notifications and site settings come from a shared backend package.
- Performance: parcel data was removed from the Place Atlas's initial HTML and is now loaded from the API once the map becomes visible; the page's HTML shrank by roughly 86%.
- SEO and GEO: every page uses metadata from the database; there is a dynamic sitemap and llms.txt, plus JSON-LD such as Article, Place, Person and ItemList. Article SEO scores and indexing decisions come from a single shared package.
- Language and URLs: the site publishes in Turkish; URLs carry no language prefix, and the setup is ready for additional languages.
- Security and privacy: records of living people are kept in a private area visible only to their owner; negative tests confirm that members-only records do not leak to anonymous requests. Private files never get a public URL, and no face recognition is used.
- Accessibility: mobile-first design, three text size levels and read-aloud via the browser's speech engine.
Integrations
The Village Guide and the Ottoman reading assistant run on the Anthropic Claude API; oral memory recordings are transcribed with the Whisper model on Groq and summarised. All AI output is marked as a draft and is never published without editor approval. The platform also includes Google sign-in and SMS code phone login, a double opt-in newsletter, Telegram notifications to administrators about user activity, Sentry error tracking and a content source API for sharing selected articles on social media.
Outcome and today
The platform is live at bayramozukoyu.com. History, archive, place atlas, family tree, guestbook and research articles are in active use, and the content grows steadily with new archive readings. The Oral Memory and Village Services sections are technically ready and waiting for their first consented recordings and service providers. Because the architecture keeps branding and village data out of the code, the same structure can be set up for another village or association with a settings and content package.