Artist website · Macedonian content · Scoped AI assistant
Overview
I built this as an official artist website for Dimitar Andonovski.
The site presents biography, journey, music, theatre, studio, gallery, contact sections, public listening links, and a small AI assistant that answers only questions connected to the artist's public work.
The private source contains production assets and configuration. The public repository connected below documents selected architecture notes and sanitized snippets only.
The challenge
The project needed to present a real artist profile in a way that feels personal, structured, and easy to navigate.
The main challenge was to combine story, discography, theatre work, studio work, media links, and contact flow without turning the page into a generic biography template.
My role
I structured the website, built the frontend routes and reusable sections, organized public artist data, connected the assistant behavior, and prepared the public pattern repository.
The work includes frontend implementation, content structure, public data modeling, scoped assistant logic, and deployment-oriented project setup.
Project structure
Core modules
Artist homepage
The homepage introduces Dimitar Andonovski as an artist through a cinematic Macedonian-language layout with music, theatre, studio, and contact entry points.
Biography and journey
The biography and journey routes organize the public story, milestones, awards, Eurovision reference, theatre work, and career development into readable sections.
Music section
The music section groups public songs, listening links, featured videos, and related artist metadata so visitors can move from biography to actual work quickly.
Theatre and studio sections
Separate sections present theatre compositions, stage work, studio collaborations, voice work, violin, production, and other professional activities.
Scoped AI assistant
The assistant answers only questions related to Dimitar's public work, website navigation, booking direction, and published artist information. It refuses unrelated topics and has fallback responses when the AI gateway is unavailable.
Public data model
Public links, songs, awards, videos, and schema.org metadata are kept in structured data files so the website can reuse the same information across multiple routes.
Technical decisions
Macedonian content first
The website is written for the artist's real audience, so the main page language, section labels, and assistant behavior are aligned with Macedonian visitors.
Separate content routes
Biography, journey, music, theatre, and studio content are split into focused routes instead of one overloaded page. This keeps the website easier to scan.
Scoped assistant instead of generic chatbot
The assistant is intentionally limited to the artist website context. That makes it safer and more useful than a general chat widget.
Public snippets instead of full source
The public repository explains selected patterns and sanitized snippets. It does not publish production assets, full private source, credentials, deployment secrets, or private configuration.
Tech stack
Proof / Evidence
This case study is based on the private Dimitar Andonovski autobiography website. The public material shows architecture and code patterns without publishing production assets, secrets, private configuration, or full source code.
Public proof shown on this page
A public architecture diagram showing the artist website structure: TanStack Start app, content routes, shared artist data, scoped chat API, floating assistant, and public snippets repository.
Public code & documentation
Public snippets and architecture notes from the Dimitar Andonovski autobiography website: TanStack Start routes, artist data structure, Motion UI patterns, scoped chat API, floating assistant behavior, and safe public documentation.
Code excerpt: scoped assistant guard
The AI assistant is not a general chatbot. It is designed around a narrow website context and should answer only artist-related questions, navigation questions, public music and theatre information, and contact direction.
// Scoped chat API pattern for an artist website.
// The assistant only answers questions about public artist information,
// navigation, booking direction, music, theatre, and studio work.
const allowedTopics = [
"biography",
"music",
"theatre",
"studio",
"booking",
"website navigation",
];
export async function answerArtistQuestion(message: string) {
const isInScope = allowedTopics.some((topic) =>
message.toLowerCase().includes(topic),
);
if (!isInScope) {
return {
answer:
"I can help with questions about the artist, music, theatre, studio work, and contact information.",
};
}
return {
answer:
"Use the public artist data and page content as the only source for the response.",
};
}Full sanitized example in snippets/scoped-chat-api.ts. The repository also includes artist data modeling, route metadata, and floating chat UI snippets.
Publication note
The public repository is a documentation and snippet reference. It does not include the full private website source, production images, credentials, deployment secrets, private configuration, or unpublished project files.