The problem
Oniyanma Dōjō teaches Bujinkan Ninpō Budō Taijutsu, Ninjutsu, to children, adults and advanced students in Kirchberg ob der Donau and Linz, Upper Austria. It opened in Linz in 2013 and extended its training to the Rohrbach district in early 2023; its instructor, Aleksandar Milošević, is a Bujinkan Shihan, 14. Dan. The WordPress site exported as 20 pages, 13 seminar posts, a directory of ten partner dōjō and two locations, in German, and it still serves oniyanma.at today. A first rebuild in the summer went up on a hosting preview with every page answering, and the dojo's owner compared it with the live site and sent it back: texts had been rewritten and shortened, images were small and wrong, every inner page sat on one template. The cutover was halted before DNS was touched. The second pass began in November with one rule: this is a migration, not a rewrite, and the old site's words are the content.
What we did
Eighteen pages: twelve German pages and three training programs, plus three seminar pages in English (the Gasshuku stays German, as on the old site). Every text from the old site is carried word for word, wording, sentence order and list structure included; only navigation, buttons, form labels, messages and metadata are new. Thirty suspected typos in the old texts were listed on one question sheet for the dojo owner, who ruled on each; nothing was corrected silently. He also chose du throughout, with Sie kept for the legal texts.
The training calendar is his published Google Sheet. The server reads it once an hour and renders the dates as the site's own tables: the next sessions on the homepage, the full list by month on its own page. No embedded spreadsheet, no request from the visitor's browser to Google. If the read fails, the last good copy stays; with none, a link to the document. A check in the build holds the published opening hours equal to the sheet.
Two forms: a German contact form, which also serves the free trial training page, and an English seminar registration. Both run a honeypot, field validation and a bot check, then send through Postmark to the dojo and a confirmation to the sender; a failure to reach the dojo is an error, not a silent success. The WordPress addresses (programs, the instructor page, seminars, partners and locations) redirect to their new homes in one hop. Photographs in flow are black and white, one treatment; the three program illustrations and the instructor's likeness are the owner's. An accessibility check with four further checks (form method, autocomplete, hover and focus contrast, page overflow) runs across all 18 pages at desktop and phone widths, and a second guard scans the finished pages for the dashes the owner banned.
The hard part
A calendar that belongs to the owner and not to the code. Training days, times and places change through the year, and the one thing a dojo owner will keep current is the sheet he already keeps. The template answer is an embedded Google Sheet, which hands every visitor's page view to Google before any consent and looks like a spreadsheet. The site instead reads the published sheet on the server, caches it for an hour, maps the sheet's place words to the venue labels the owner named and renders the result as the site's own tables, with the last good copy held if Google is unreachable. The owner's one recurring duty is to add the 2027 dates to the same sheet before mid-December; nothing changes in code.
What changed
The rebuilt site is built and in release: it runs on its hosting, 18 pages answer, the old addresses reach their new pages in one hop and the accessibility check is clean on every page at desktop and phone widths. It is not yet on oniyanma.at, which still serves the WordPress site, and no cutover date exists; the domain comes last, after the mail sending and the bot check have been proven on the release build. Nothing has been measured on the live domain, and this study claims no result there. What the dojo owner gets is a site whose words are his, whose calendar he already edits and whose inquiries reach him with a confirmation to the sender.


