export const locales = ["en", "sr"] as const; export type Locale = (typeof locales)[number]; export const defaultLocale: Locale = "en"; export function isValidLocale(value: string): value is Locale { return locales.includes(value as Locale); } export const localeNames: Record = { en: "English", sr: "Srpski" }; export const localeFlags: Record = { en: "🇬🇧", sr: "🇷🇸" }; export const langToLocale: Record = { en: "en", sr: "sr", bs: "sr", hr: "sr" }; export type Dictionary = typeof dictionaries.en; // `order` controls position on the projects page (within its client/personal // section). `carouselOrder` controls position in the homepage carousel, // independently of type. Lower numbers come first. `inCarousel: false` hides // a project from the homepage carousel while keeping it on the projects page. const projectsMeta = { "security-consultancy": { order: 1, carouselOrder: 3, inCarousel: true, tags: ["React", "Node.js", "Express", "JavaScript"], live: true, type: "client" as const, url: "https://obzor.rs/", github: "", download: "", inProgress: false, screenshots: ["/site1.png"] as string[] }, "ecommerce-platform": { order: 2, carouselOrder: 4, inCarousel: true, tags: ["React", "Express.js", "Docker", "CI/CD"], live: true, type: "client" as const, url: "https://kupitri.com", github: "", download: "", inProgress: false, screenshots: ["/site2.png"] as string[] }, "mobile-companion": { order: 3, carouselOrder: 3, inCarousel: false, tags: ["Java", "Spring Boot", "React Native", "PostgreSQL"], live: false, type: "client" as const, url: "", github: "", download: "", inProgress: true, screenshots: ["/tba.png"] as string[] }, "business-landing": { order: 4, carouselOrder: 4, inCarousel: false, tags: ["Next.js", "Tailwind CSS"], live: false, type: "client" as const, url: "", github: "", download: "", inProgress: true, screenshots: ["/tba.png"] as string[] }, "etf-oglasi": { order: 1, carouselOrder: 1, inCarousel: true, tags: ["React Native", "Node.js"], live: false, type: "personal" as const, url: "", github: "https://git.ksan.dev/ksan/etf-oglasi", download: "https://git.ksan.dev/ksan/etf-oglasi/releases/tag/mobile-v6", inProgress: false, screenshots: ["/etfoglasi.png", "/etf2.png", "/etfoglasiapp.jpg", "/etf1.png"] as string[] }, "ssh-portfolio": { order: 2, carouselOrder: 6, inCarousel: true, tags: ["Go", "Bubble Tea", "Wish", "SSH"], live: false, type: "personal" as const, url: "", github: "https://git.ksan.dev/ksan/ssh-portfolio", download: "", inProgress: true, screenshots: ["/sshksan.png"] as string[] }, "botinator": { order: 3, carouselOrder: 5, inCarousel: true, tags: ["Java", "JDA", "Lavalink"], live: false, type: "personal" as const, url: "", github: "https://git.ksan.dev/ksan/Botinator", download: "", inProgress: false, screenshots: ["/botinator.png"] as string[] }, "ksan-dev": { order: 4, carouselOrder: 2, inCarousel: true, tags: ["Next.js", "TypeScript", "Tailwind CSS"], live: true, type: "personal" as const, url: "https://ksan.dev", github: "https://git.ksan.dev/ksan/ksan.dev", download: "", inProgress: false, screenshots: ["/kd.svg"] as string[] }, "gpufand": { order: 5, carouselOrder: 9, inCarousel: false, tags: ["C++", "Qt", "Linux", "NVIDIA"], live: false, type: "personal" as const, url: "", github: "https://git.ksan.dev/ksan/gpufand", download: "", inProgress: true, screenshots: ["/tba.png"] as string[] }, "e-voting": { order: 6, carouselOrder: 10, inCarousel: false, tags: ["Java", "BouncyCastle", "JavaFX", "Gradle"], live: false, type: "personal" as const, url: "", github: "https://git.ksan.dev/ksan/e-voting", download: "", inProgress: false, screenshots: ["/evoting.png"] as string[] }, }; export const dictionaries = { en: { nav: { features: "Features", projects: "Projects", services: "Services", about: "About", contact: "Contact" }, hero: { badge: "Available for freelance & full-time", titleLine1: "Full-stack engineering,", titleLine2: "end to end.", subtitle: "From idea to production-ready software. I build and deploy end-to-end systems — including web applications, backend services, and APIs — into production.", cta: "Start a project", ctaSecondary: "See what I do", stats: { projects: "Projects shipped", clients: "Live client sites", infra: "Cloud & self-hosted systems", response: "Response time" }, }, services: { badge: "What I do", title: "Everything your project needs,", titleAccent: "from one person.", subtitle: "Design, development, deployment, and maintenance — handled end-to-end. No unnecessary complexity, no handoffs, and minimal external dependencies.", items: [ { title: "Full-Stack Development", description: "Production-ready web applications built with modern technologies, focused on performance, maintainability, and fast iteration.", }, { title: "Backend & APIs", description: "Scalable services, authentication, payments, integrations, and business logic built for production.", }, { title: "Infrastructure & Deployment", description: "Cloud or self-managed deployments with Docker, CI/CD, monitoring, backups, SSL, and reliable release workflows.", }, { title: "Mobile Applications", description: "Cross-platform React Native apps that share business logic with your web platform.", }, ], }, techStack: { badge: "Tech stack", title: "Tools I work with", titleAccent: "daily.", subtitle: "Languages, frameworks, and infrastructure I use to ship production software." }, projects: { badge: "Work", title: "Featured projects", viewAll: "View all projects", clientWork: "Client", personal: "Personal", live: "Live", source: "Source", viewProject: "View", download: "Download", inProgress: "In progress", items: [ { slug: "security-consultancy", title: "Security Consultancy Website", description: "A modern website built for a professional security consultancy specializing in protecting confidential conversations and advising businesses on information security.", about: "A modern website built for a professional security consultancy specializing in protecting confidential conversations and advising businesses on information security. Designed to clearly present services, build trust, and make it easy for clients to get in touch.", ...projectsMeta["security-consultancy"] }, { slug: "ecommerce-platform", title: "E-Commerce Platform", description: "A full-stack e-commerce website built with React and Express.js, featuring product browsing, shopping cart management, and a streamlined checkout experience.", about: "A full-stack e-commerce website built with React and Express.js, featuring product browsing, shopping cart management, and a streamlined checkout experience. Containerized with Docker and deployed through a CI/CD pipeline for reliable updates.", ...projectsMeta["ecommerce-platform"] }, { slug: "botinator", title: "Botinator", description: "A hobby Discord bot for personal use. A small JDA bot with a few fun slash commands and music playback powered by Lavalink.", about: "A hobby Discord bot built for personal use with Java and JDA. Handles a handful of fun slash commands alongside music playback powered by Lavalink, running as a small self-hosted service.", ...projectsMeta["botinator"] }, { slug: "mobile-companion", title: "Client meeting manager", description: "A Java Spring Boot app for note-taking, scheduling, and tracking client meetings, with a React Native companion app.", about: "A Java Spring Boot backend paired with a React Native app for managing client relationships — take notes, schedule meetings, and track follow-ups in one place. Uses PostgreSQL for storage. Currently in progress.", ...projectsMeta["mobile-companion"] }, { slug: "ssh-portfolio", title: "SSH Portfolio", description: "A terminal-based portfolio you can explore over SSH — no browser required. Being updated with new stuff I've learned.", about: "A TUI portfolio built with Go and Bubble Tea, served through a Wish SSH server. Just `ssh` in from any terminal and navigate projects, skills, and contact info entirely with the keyboard — no browser, no JavaScript, no web server. Still being updated with new stuff I've learned along the way.", ...projectsMeta["ssh-portfolio"] }, { slug: "business-landing", title: "Business landing page", description: "A modern marketing site for a local company, built for speed and SEO with automatic SSL certificates.", about: "A modern marketing site for a local company. Built with Next.js and Tailwind CSS, optimised for performance and search visibility with automatic SSL certificates. Currently in progress.", ...projectsMeta["business-landing"] }, { slug: "etf-oglasi", title: "ETF Oglasi", description: "Classifieds app for students of the Faculty of Electrical Engineering. Follow specific courses and get push notifications for their updates.", about: "Classifieds app for students of the Faculty of Electrical Engineering. Follow specific courses and get push notifications for their updates. [More details coming soon.]", ...projectsMeta["etf-oglasi"] }, { slug: "ksan-dev", title: "ksan.dev", description: "My personal website and portfolio, built with Next.js.", about: "This site — a personal website and portfolio built with Next.js, TypeScript, and Tailwind CSS. Showcases my work and skills, self-hosted with automatic SSL and zero-downtime deploys.", ...projectsMeta["ksan-dev"] }, { slug: "gpufand", title: "GPUFand", description: "A Linux GPU fan control and monitoring tool with a secure background daemon and a Qt-based interface.", about: "An open-source Linux GPU fan control and monitoring tool, currently under active development. Runs as a secure background daemon paired with a Qt-based interface, and currently supports NVIDIA GPUs, with AMD and Intel support planned for future releases. Features customizable fan curves, real-time telemetry, and a modular architecture built for easy expansion.", ...projectsMeta["gpufand"] }, { slug: "e-voting", title: "E-Voting", description: "A secure e-voting application for creating and participating in elections. It uses certificates, encryption, and digital signatures to protect identity, privacy, and data integrity. ", about: "A university project: a secure e-voting application for creating and participating in elections. Uses certificates, encryption, and digital signatures to protect voter identity, privacy, and data integrity throughout the voting process. [Not for general use]", ...projectsMeta["e-voting"] }, ], }, projectsPage: { badge: "Portfolio", title: "Projects I've built", titleAccent: "and deployed.", subtitle: "Production client work and personal projects focused on improving my development workflow and tools.", deployedTitle: "Deployed for clients", featuredTitle: "Personal & open source", }, servicesPage: { badge: "Services", heroTitle: "I solve problems,", heroTitleAccent: "not just write code.", heroSubtitle: "You need software that works and a developer who takes responsibility for the entire system. I handle the full lifecycle — from first commit to production deployment — so you can focus on your business.", heroCta: "Discuss your project", offeringsLabel: "What I offer", offeringsTitle: "Built for real business needs.", offeringsSubtitle: "Every service covers the full path from idea to production deployment and long-term maintenance. No handoffs, no gaps, no unnecessary middlemen.", offerings: [ { title: "Web applications", description: " Custom web applications designed around your workflow — not generic templates adapted after the fact. I write the frontend, backend, and database layer, then deploy it on infrastructure I manage.", includes: [ "Responsive, fast-loading interfaces", "Secure authentication and role management", "Admin dashboards and internal tools", "Database design, backups, and migrations", ], }, { title: "Infrastructure & deployment", description: "I handle deployment, infrastructure, monitoring, and maintenance — whether your project runs on my own servers or trusted cloud providers. You work with a single technical partner responsible for both the application and the environment it runs in.", includes: [ "Docker-based containerized deployment", "Cloud and self-hosted infrastructure options", "Automatic SSL and reverse proxy setup", "Monitoring, backups, and incident response", "Portable, vendor-independent infrastructure", ], }, { title: "Mobile development", description: "Cross-platform mobile apps built with React Native, sharing the same backend and business logic as your web application. Shared business logic and consistent behavior across platforms.", includes: [ "iOS and Android from a single codebase", "Shared API layer with your web app", "Push notifications and offline support", "App store submission and updates", ], }, { title: "Ongoing support", description: "Software doesn't end at launch. I provide ongoing development, bug fixes, security updates, and feature additions — with a single point of contact with support from the same developer who built the system.", includes: [ "Priority bug fixes and patches", "Feature development and iterations", "Security updates and dependency management", "Performance monitoring and optimization", ], }, ], infraBadge: "Infrastructure I manage", infraTitle: "Your project runs on infrastructure I configure, deploy, and maintain.", infraParagraphs: [ "Most developers write code and hand it off. I also handle the deployment environment the application runs on — whether that’s my own infrastructure or trusted cloud providers. Projects are deployed using Docker, routed through Traefik, and updated through automated deployment pipelines designed to minimize downtime.", "This gives clients a single technical contact who understands both the application and the infrastructure underneath it — without the usual back-and-forth between developers, hosting providers, and external DevOps contractors.", ], infraPoints: [ { title: "End-to-end infrastructure management", description: "I handle deployment configuration, containers, SSL certificates, backups, monitoring, and maintenance. If something breaks, you contact the same person who built the system." }, { title: "Portable, vendor-independent deployments", description: "Applications are containerized and infrastructure is standardized. If you ever want to migrate to another provider or your own servers, the stack can be transferred without rebuilding the project from scratch." }, { title: "Reliable production environments", description: "Client projects are monitored, backed up, and maintained with stability in mind. The goal is simple: predictable deployments, fast recovery, and minimal downtime." }, ], processLabel: "Process", processTitle: "How we work together.", processSubtitle: "A straightforward process with clear communication and defined milestones from start to launch. ", processSteps: [ { title: "Discovery", description: "We discuss your goals, users, workflows, and technical requirements to define the project scope and priorities." }, { title: "Proposal", description: "You receive a clear project outline with deliverables, timeline, pricing, and technical direction before development begins." }, { title: "Development", description: "I build in iterative stages with regular updates and feedback cycles, so you can review progress throughout the project." }, { title: "Launch", description: "I handle deployment, infrastructure configuration, monitoring, backups, and production readiness checks before release." }, { title: "Support", description: "After launch, I remain available for maintenance, updates, improvements, and long-term technical support." }, ], pricingLabel: "Pricing", pricingTitle: "Transparent, scope-based pricing.", pricingDescription: "Every project is different, so pricing is based on scope, complexity, and long-term requirements. Before any work begins, you receive a detailed proposal with clear deliverables, timelines, and costs.", pricingPoints: [ { title: "Tailored to the project", description: "A marketing website and a custom SaaS platform have very different requirements. Pricing reflects the actual scope and technical complexity of your project.", }, { title: "Direct collaboration", description: "You work directly with the person designing, building, and deploying the system — with clear communication and no unnecessary layers.", }, { title: "Flexible engagement", description: "Projects can be structured as fixed-scope builds, ongoing retainers, or long-term development partnerships depending on your needs.", }, ], pricingCta: "Request a project estimate", }, aboutPage: { badge: "About", title: "Full-Stack", titleAccent: "developer.", subtitle: "Experienced across the entire software development process — from idea to production-ready product.", approachTitle: "My approach.", approachParagraphs: [ { type: "text", content: "I build complete products — frontend, backend, databases, and the infrastructure they run on. When you work with me, you're collaborating directly with a developer familiar with every stage of the software development process, from planning to deployment.", }, { type: "linkParagraph", before: "I maintain a home Linux server where I test projects, automate backups, and manage deployments. Client applications are hosted and maintained using Docker and Traefik on industry-standard cloud services. You can explore selected work on the ", linkText: "Projects page", href: "/projects", }, { type: "text", content: "I use AI-assisted development tools to accelerate prototyping, research, debugging, and repetitive tasks while maintaining a strong focus on code quality, stability, and long-term maintainability.", }, { type: "text", content: "Currently studying Software Engineering at the Faculty of Electrical Engineering, University of Banja Luka, while continuously improving my skills in technologies such as Go and C#.", }, { type: "text", content: "I'm always interested in ambitious ideas, technically challenging projects, and collaborations that create real value.", }, ], quickFactsTitle: "Quick facts", facts: [ { label: "Based in", value: "Banja Luka, BA" }, { label: "Server", value: "Home Linux" }, { label: "Languages", value: "EN / SR" }, { label: "Open to", value: "Freelance, full-time" }, { label: "Response", value: "< 24h" }, ], highlightsTitle: "What I bring.", highlights: [ { title: "End-to-end ownership", description: "From design to deployment, I handle the entire stack — frontend, backend, and infrastructure — providing a single point of responsibility for the product.", }, { title: "Security & reliability", description: "My focus is on keeping systems up to date, stable, and built following modern security best practices.", }, { title: "Optimized for speed", description: "Fast-loading interfaces with optimized assets, efficient frontend code, and performance-focused architecture for a smooth user experience.", }, { title: "Production-grade quality", description: "Type-safe code, automated testing where it adds value, CI/CD pipelines, and monitoring. Built with long-term maintainability in mind.", }, ], }, contactPage: { badge: "Open for projects", title: "Let's build", titleAccent: "something good.", subtitle: "Tell me about your project. I'll get back to you within a day with next steps.", nameLabel: "Your name", namePlaceholder: "John Doe", emailLabel: "Email", emailPlaceholder: "john@example.com", subjectLabel: "Subject", subjectPlaceholder: "Project inquiry", messageLabel: "Message", messagePlaceholder: "Tell me about your project...", send: "Send message", sending: "Sending...", avgResponse: "Average response time: under 24h", successTitle: "Message sent.", successMessage: "Thanks for reaching out — I'll get back to you within 24 hours.", sendAnother: "Send another message", responseTime: "Response time", responseValue: "Usually within 24h", location: "Location", locationValue: "Banja Luka, Bosnia and Herzegovina", }, cta: { title: "Have a project in mind?", titleAccent: "Let's build it together.", subtitle: "From a quick landing page to a full custom platform — I'd love to hear what you're working on. Usually reply within 24 hours.", contact: "Get in touch", email: "contact@ksan.dev" }, ipInfo: { title: "Visitor info", region: "Region", city: "City", isp: "ISP", connection: "Connection", secure: "Secure", notSecure: "Not secure", loading: "Detecting...", error: "Could not detect" }, langBanner: { message: "This page is also available in", switchTo: "Srpski", dismiss: "Stay in English" }, footer: { product: "Product", company: "Company", connect: "Connect", rights: "Built & self-hosted by me", status: "Available for work" }, }, sr: { nav: { features: "Vještine", projects: "Projekti", services: "Usluge", about: "O meni", contact: "Kontakt" }, hero: { badge: "Dostupan za freelance i stalni posao", titleLine1: "Full-stack inženjering,", titleLine2: "end-to-end", subtitle: "Od ideje do produkcijski spremnog softvera. Razvijam i deploy-ujem end-to-end sisteme — od web aplikacija i backend servisa do API-ja — u produkcijsko okruženje.", cta: "Započni projekat", ctaSecondary: "Pogledaj usluge", stats: { projects: "Projekata pokrenuto", clients: "Aktivnih klijentskih sajtova", infra: "Hybrid infrastruktura (self-hosted + cloud)", response: "Vrijeme odgovora" }, }, services: { badge: "Šta radim", title: "Sve što vaš projekat treba,", titleAccent: "od jedne osobe.", subtitle: "Dizajn, razvoj, deployment i održavanje — sve u jednom procesu. Bez agencija, bez posrednika i sa minimalnom zavisnošću od eksternih platformi.", items: [ { title: "Full-Stack razvoj", description: "Produkcijski spremne web aplikacije izrađene modernim tehnologijama, sa fokusom na performanse, održivost i brzu isporuku.", }, { title: "Backend i API-jevi", description: "Skalabilni servisi, autentifikacija, plaćanja, integracije i poslovna logika spremni za produkciju.", }, { title: "Infrastruktura i Deployment", description: "Cloud ili samostalni deployment sa Docker-om, CI/CD-om, monitoringom, backup-om, SSL-om i pouzdanim procesima isporuke.", }, { title: "Mobilne aplikacije", description: "React Native aplikacije za više platformi koje dijele poslovnu logiku sa vašom web platformom.", }, ], }, techStack: { badge: "Tech stack", title: "Alati sa kojima radim", titleAccent: "svaki dan.", subtitle: "Jezici, frameworkovi i infrastruktura koju koristim za isporuku produkcijskog softvera." }, projects: { badge: "Radovi", title: "Istaknuti projekti", viewAll: "Pogledaj sve projekte", clientWork: "Klijent", personal: "Lični", live: "Uživo", source: "Kod", viewProject: "Pogledaj", download: "Preuzmi", inProgress: "U izradi", items: [ { slug: "security-consultancy", title: "Sajt za sigurnosno savjetovanje", description: "Moderan sajt napravljen za profesionalnu sigurnosnu konsultantsku firmu specijalizovanu za zaštitu povjerljivih razgovora i savjetovanje biznisa o informacionoj sigurnosti.", about: "Moderan sajt napravljen za profesionalnu sigurnosnu konsultantsku firmu specijalizovanu za zaštitu povjerljivih razgovora i savjetovanje biznisa o informacionoj sigurnosti. Napravljen da jasno predstavi usluge, izgradi povjerenje i olakša klijentima da stupe u kontakt.", ...projectsMeta["security-consultancy"] }, { slug: "ecommerce-platform", title: "E-Commerce platforma", description: "Full-stack e-commerce sajt napravljen u React-u i Express.js-u, sa pregledom proizvoda, upravljanjem korpom i pojednostavljenim checkout procesom.", about: "Full-stack e-commerce sajt napravljen u React-u i Express.js-u, sa pregledom proizvoda, upravljanjem korpom i pojednostavljenim checkout procesom. Kontejnerizovan sa Docker-om i deployovan kroz CI/CD pipeline za pouzdana ažuriranja.", ...projectsMeta["ecommerce-platform"] }, { slug: "botinator", title: "Botinator", description: "Hobi Discord bot za ličnu upotrebu. Mali JDA bot sa nekoliko zabavnih slash komandi i puštanjem muzike preko Lavalink-a.", about: "Hobi Discord bot napravljen za ličnu upotrebu u Javi i JDA-u. Ima nekoliko zabavnih slash komandi i puštanje muzike preko Lavalink-a, radi kao mali self-hosted servis.", ...projectsMeta["botinator"] }, { slug: "mobile-companion", title: "Menadžer klijentskih sastanaka", description: "Java Spring Boot aplikacija za beleške, zakazivanje i praćenje sastanaka sa klijentima, uz React Native prateću aplikaciju.", about: "Java Spring Boot backend uparen sa React Native aplikacijom za upravljanje odnosima sa klijentima — beleške, zakazivanje sastanaka i praćenje follow-up-ova na jednom mestu. Koristi PostgreSQL za skladištenje podataka. Trenutno u izradi.", ...projectsMeta["mobile-companion"] }, { slug: "ssh-portfolio", title: "SSH Portfolio", description: "Terminalski portfolio koji možeš istražiti preko SSH-a — bez potrebe za browserom. Trenutno se ažurira novim stvarima koje sam naučio.", about: "TUI portfolio napravljen u Go-u i Bubble Tea-u, servovan kroz Wish SSH server. Samo se konektuj preko `ssh` iz bilo kog terminala i pregledaj projekte, vještine i kontakt informacije potpuno preko tastature — bez browsera, bez JavaScript-a, bez web servera. I dalje se ažurira novim stvarima koje sam usput naučio.", ...projectsMeta["ssh-portfolio"] }, { slug: "business-landing", title: "Poslovna landing stranica", description: "Moderan marketing sajt za lokalnu kompaniju, napravljen za brzinu i SEO, sa automatskim SSL sertifikatima.", about: "Moderan marketing sajt za lokalnu kompaniju. Napravljen u Next.js-u i Tailwind CSS-u, optimizovan za performanse i vidljivost u pretraživačima, sa automatskim SSL sertifikatima. Trenutno u izradi.", ...projectsMeta["business-landing"] }, { slug: "etf-oglasi", title: "ETF Oglasi", description: "Aplikacija za oglase namijenjena studentima Elektrotehničkog fakulteta. Prati specificne predmete, i dobijaj push notificakije za njihove novosti.", about: "Aplikacija za oglase namijenjena studentima Elektrotehničkog fakulteta. Prati specificne predmete, i dobijaj push notificakije za njihove novosti. [Više detalja uskoro]", ...projectsMeta["etf-oglasi"] }, { slug: "ksan-dev", title: "ksan.dev", description: "Moj lični sajt i portfolio, napravljen u Next.js-u.", about: "Ovaj sajt — lični sajt i portfolio napravljen u Next.js-u, TypeScript-u i Tailwind CSS-u. Prikazuje moje radove i vještine, self-hostovan sa automatskim SSL-om i zero-downtime deployevima.", ...projectsMeta["ksan-dev"] }, { slug: "gpufand", title: "GPUFand", description: "Alat za kontrolu i monitoring GPU ventilatora na Linuxu, sa sigurnim background daemonom i Qt interfejsom.", about: "Open-source alat za kontrolu i monitoring GPU ventilatora na Linuxu, trenutno u aktivnom razvoju. Radi kao siguran background daemon uparen sa Qt interfejsom, i trenutno podržava NVIDIA grafičke kartice, sa AMD i Intel podrškom planiranom za buduća izdanja. Ima podesive fan krive, telemetriju u realnom vremenu i modularnu arhitekturu napravljenu za lako proširivanje.", ...projectsMeta["gpufand"] }, { slug: "e-voting", title: "E-Voting", description: "Sigurna e-voting aplikacija za kreiranje i učešće u izborima. Koristi sertifikate, enkripciju i digitalne potpise za zaštitu identiteta, privatnosti i integriteta podataka.", about: "Univerzitetski projekat: sigurna e-voting aplikacija za kreiranje i učešće u izborima. Koristi sertifikate, enkripciju i digitalne potpise za zaštitu identiteta glasača, privatnosti i integriteta podataka tokom cijelog procesa glasanja.", ...projectsMeta["e-voting"] }, ], }, projectsPage: { badge: "Portfolio", title: "Projekti koje sam napravio", titleAccent: "i deployovao.", subtitle: "Produkcijski klijentski projekti i lični projekti koje razvijam za unapređenje svog development workflow-a i alata.", deployedTitle: "Deployovano za klijente", featuredTitle: "Lični i open source", }, servicesPage: { badge: "Usluge", heroTitle: "Rješavam probleme,", heroTitleAccent: "ne samo pišem kod.", heroSubtitle: "Trebate softver koji radi i osobu koji preuzima odgovornost za cijeli sistem. Vodim kompletan proces — od prve ideje do produkcijskog deploya — kako biste se mogli fokusirati na svoj posao.", heroCta: "Razgovarajmo o projektu", offeringsLabel: "Šta nudim", offeringsTitle: "Napravljeno za stvarne poslovne potrebe.", offeringsSubtitle: "Svaka usluga pokriva puni put od ideje do gotovog proizvoda. Bez prebacivanja odgovornosti, bez praznina i bez nepotrebnih posrednika.", offerings: [ { title: "Web aplikacije", description: "Custom web aplikacije prilagođene vašem načinu rada — ne generički šabloni prilagođeni naknadno. Razvijam frontend, backend i bazu podataka, a zatim aplikaciju postavljam na infrastrukturu kojom upravljam.", includes: [ "Responzivni, brzi interfejsi", "Sigurna autentifikacija i upravljanje ulogama", "Admin panel i interni alati", "Dizajn baze podataka, backupi i migracije", ], }, { title: "Infrastruktura i deployment", description: "Brinem o deployu, infrastrukturi, monitoringu i održavanju — bilo da projekat radi na vlastitim serverima ili na cloud platformama. Radite sa jednom tehničkom osobom koja je odgovorna i za aplikaciju i za sistem na kojem radi.", includes: [ "Docker kontejnerizovan deployment", "Cloud i vlastite server opcije", "Automatski SSL i reverse proxy setup", "Monitoring, backupi i reakcija na incidente", "Prenosiva, vendor-independent infrastruktura", ], }, { title: "Mobilni razvoj", description: "Cross-platform mobilne aplikacije napravljene u React Native, koje dijele istu poslovnu logiku kao web aplikacija. Konzistentno ponašanje na svim platformama.", includes: [ "iOS i Android iz jedne baze koda", "Zajednički API sloj sa vašom web aplikacijom", "Push notifikacije i offline podrška", "Objavljivanje i ažuriranje aplikacija", ], }, { title: "Kontinuirana podrška", description: "Softver ne završava sa lansiranjem. Pružam kontinuirani razvoj, popravke grešaka, sigurnosna ažuriranja i dodavanje funkcionalnosti — sa jednom osobom koja već poznaje sistem.", includes: [ "Prioritetne popravke grešaka", "Razvoj novih funkcionalnosti i iteracije", "Sigurnosna ažuriranja i upravljanje zavisnostima", "Monitoring performansi i optimizacija", ], }, ], infraBadge: "Infrastruktura koju pokrećem", infraTitle: "Vaš projekat radi na infrastrukturi koju ja konfigurišem, deployujem i održavam.", infraParagraphs: [ "Većina developera napiše kod i preda ga dalje. Ja vodim računa i o okruženju u kojem aplikacija radi — bilo da je to moja infrastruktura ili pouzdani cloud provajderi. Projekti se deployuju kroz Docker, rutiraju kroz Traefik i ažuriraju kroz automatizovane pipeline-ove dizajnirane da minimizuju downtime.", "Time klijenti dobijaju jednog tehničkog kontakta koji razumije i aplikaciju i infrastrukturu na kojoj radi — bez uobičajenog prebacivanja između developera, hosting provajdera i eksternih DevOps saradnika.", ], infraPoints: [ { title: "Kompletno upravljanje infrastrukturom", description: "Vodim računa o deploy konfiguraciji, kontejnerima, SSL sertifikatima, backupima, monitoringu i održavanju. Ako nešto zakaže, kontaktirate istu osobu koja je izgradila sistem." }, { title: "Prenosivi, vendor-independent deployment", description: "Sve je kontejnerizovano i infrastruktura je standardizovana. Ako ikada poželite prebaciti na drugog provajdera ili vlastite servere, cijeli stack se prenosi bez ponovne izrade projekta." }, { title: "Pouzdana produkcijska okruženja", description: "Klijentski projekti se prate, backupuju i održavaju sa fokusom na stabilnost. Cilj je jednostavan: predvidljivi deployovi, brz oporavak i minimalan downtime." }, ], processLabel: "Proces", processTitle: "Kako radimo zajedno.", processSubtitle: "Jednostavan proces sa jasnom komunikacijom i definisanim fazama od početka do produkcije.", processSteps: [ { title: "Analiza", description: "Razgovaramo o vašim ciljevima, korisnicima, workflow-u i tehničkim zahtjevima kako bismo definisali obim i prioritete." }, { title: "Ponuda", description: "Dobijate jasan prijedlog sa funkcionalnostima, rokovima i cijenom prije početka razvoja." }, { title: "Razvoj", description: "Razvoj se odvija kroz iteracije uz redovne povratne informacije i pregled napretka." }, { title: "Lansiranje", description: "Aplikaciju postavljam u produkciju, konfiguriram monitoring i backupe, te provjeravam stabilnost sistema prije puštanja." }, { title: "Podrška", description: "Nakon lansiranja ostajem dostupan za održavanje, dorade i dalji razvoj sistema." }, ], pricingLabel: "Cijene", pricingTitle: "Transparentne cijene bazirane na obimu.", pricingDescription: "Svaki projekat je drugačiji, zato se cijena formira prema obimu, kompleksnosti i dugoročnim zahtjevima. Prije početka dobijate jasan prijedlog sa definisanim funkcionalnostima, rokovima i troškovima.", pricingPoints: [ { title: "Prilagođeno projektu", description: "Marketing sajt i kompleksna SaaS platforma nemaju istu cijenu. Ponuda odražava stvarni obim i tehničku kompleksnost." }, { title: "Direktna saradnja", description: "Radite direktno sa osobom koja dizajnira, razvija i deploya sistem — bez nepotrebnih posrednika." }, { title: "Fleksibilan angažman", description: "Projekti mogu biti jednokratni, mjesečni ili dugoročna saradnja, u zavisnosti od potreba." }, ], pricingCta: "Zatražite besplatnu procjenu", }, aboutPage: { badge: "O meni", title: "Full-Stack", titleAccent: "developer.", subtitle: "Upoznat sa procesom od početka do kraja. Od ideje do gotovog proizvoda.", approachTitle: "Moj pristup.", approachParagraphs: [ { type: "text", content: "Pravim kompletne proizvode — frontend, backend, bazu podataka i server na kojem sve radi. Kada me angažujete, možete očekivati da će mi vaš projekat biti prioritet i povjerenje da sam upoznat sa svim vještinama koje su potrebne za realizaciju vašeg projekta, od početka do kraja.", }, { type: "linkParagraph", before: "Imam kućni Linux server na kojem testiram sve projekte i vršim backup podataka. Hostujem i održavam klijentske sajtove koristeći Docker i Traefik na third party servisima koji su industrijski standard. Već realizovane projekte možete pronaći na stranici ", linkText: "Projekti", href: "/projects", }, { type: "text", content: "Upoznat sam sa AI alatima za bržu izradu prototipa i efikasniji razvoj aplikacija. Pošto sam već upoznat sa kompletnim procesom razvoja softvera, mogu garantovati kvalitetan i stabilan proizvod.", }, { type: "text", content: "Kako bih dodatno unaprijedio svoje znanje, pohađam smjer Softversko inženjerstvo na Elektrotehničkom fakultetu Univerziteta u Banjoj Luci. Pored toga produbljujem svoje vještine u Go i C#.", }, { type: "text", content: "Uvijek tražim zanimljive ideje i projekte za saradnju i razvoj.", }, ], quickFactsTitle: "Brze činjenice", facts: [ { label: "Lokacija", value: "Banja Luka, BA" }, { label: "Server", value: "Kućni Linux" }, { label: "Jezici", value: "EN / SR" }, { label: "Otvoren za", value: "Freelance, puno radno" }, { label: "Odgovor", value: "< 24h" }, ], highlightsTitle: "Šta donosim.", highlights: [ { title: "End-to-end vlasništvo", description: "Od ideje do gotovog proizvoda. Radite s jednom osobom koja razumije cijeli stack i sve zahtjeve projekta, bez potrebe za posrednicima ili dijeljenjem odgovornosti." }, { title: "Sigurnost i Pouzdanost", description: "Fokus na stabilne i sigurne sisteme koji su redovno ažurirani i prate moderne sigurnosne standarde i najbolje prakse." }, { title: "Optimizovano za brzinu", description: "Brzi i responzivni interfejsi, optimizovani resursi i efikasan frontend kod, uz arhitekturu fokusiranu na performanse i glatko korisničko iskustvo." }, { title: "Kvalitet izrade", description: "Type-safe kod, automatsko testiranje, CI/CD pipeline, monitoring. Fokus na dugoročno održive sisteme, ne kratkoročna rješenja." }, ], }, contactPage: { badge: "Otvoren za projekte", title: "Hajde da napravimo", titleAccent: "nešto dobro.", subtitle: "Ispričajte mi o svom projektu. Javiću vam se u roku od jednog dana sa sljedećim koracima.", nameLabel: "Vaše ime", namePlaceholder: "Marko Marković", emailLabel: "Email", emailPlaceholder: "marko@primjer.com", subjectLabel: "Predmet", subjectPlaceholder: "Upit za projekat", messageLabel: "Poruka", messagePlaceholder: "Ispričajte mi o svom projektu...", send: "Pošalji poruku", sending: "Slanje...", avgResponse: "Prosječno vrijeme odgovora: ispod 24h", successTitle: "Poruka poslata.", successMessage: "Hvala na poruci — javiću vam se u roku od 24 sata.", sendAnother: "Pošalji novu poruku", responseTime: "Vrijeme odgovora", responseValue: "Obično ispod 24h", location: "Lokacija", locationValue: "Banja Luka, Bosna i Hercegovina", }, cta: { title: "Imate projekat o kojem razmišljate?", titleAccent: "Realizujmo ga zajedno", subtitle: "Od osnovne stranice do potpuno custom platforme — volio bih da čujem na čemu radite.", contact: "Kontaktirajte me", email: "contact@ksan.dev" }, ipInfo: { title: "Info o posjetiocu", region: "Regija", city: "Grad", isp: "ISP", connection: "Konekcija", secure: "Sigurna", notSecure: "Nije sigurna", loading: "Detektovanje...", error: "Nije moguće detektovati" }, langBanner: { message: "This page is also available in", switchTo: "English", dismiss: "Ostani na srpskom" }, footer: { product: "Proizvod", company: "Kompanija", connect: "Kontakt", rights: "Napravljeno i self-hostovano", status: "Dostupan za posao" }, }, } as const; export function getDictionary(locale: string): Dictionary { if (isValidLocale(locale)) return dictionaries[locale]; return dictionaries[defaultLocale]; }