{"lang":"en","t":{"nav":{"about":"About Us","projects":"Projects","price":"Price","contact":"Contacts"},"hero":{"badge":"Building digital products","title1":"DevMotion","title2":"Studio","subtitle":"We transform business ideas into digital products that generate profit. Drupal, React, Shopify - full development cycle in 4-8 weeks.","stats":{"projects":"Successful Projects","projectsDesc":"For businesses in Ukraine and Europe","years":"Years in Business","yearsDesc":"Enterprise development and support","onTime":"Delivered On Time","onTimeDesc":"Fixed timelines and budget"}},"portfolio":{"subtitle":"Real results for our clients","title1":"Port","title2":"folio","viewAll":"All Projects"},"technologies":{"subtitle":"Modern stack. AI-integrated. Production-ready.","title1":"Techno","title2":"logies","viewAll":"All Services"},"cta":{"subtitle":"Ready to scale your business?","title1":"Your project -","title2":"next?","description":"Fill out the form - get a project estimate within 24 hours. Free.","button":"Get Estimate","viewProjects":"View Projects","copyright":"© DevMotion Studio / 2026"},"projects":{"pageTitle":"Our Projects","pageSubtitle":"Real results for real businesses. Here's some of our recent work.","filterLabel":"Filter","filterAll":"All","filterCorporate":"Corporate","filterEcommerce":"E-commerce","filterPortals":"Portals","categories":{"corporate":"Corporate Websites","ecommerce":"E-commerce","portals":"Portals","promo":"Promo Sites","web-apps":"Web Applications","webgl":"WebGL Demo"},"filterWebgl":"WebGL Demo"},"pricing":{"pageTitle":"Our Pricing","pageSubtitle":"Transparent pricing for every business size. No hidden costs.","startingFrom":"from","goodFor":"Good for:","cards":[{"title":"Landing Page","price":"$1,500","features":["Responsive design","Up to 5 sections","Contact form","Basic SEO","1 month support","Hosting (Hetzner) - 1 year free"],"goodFor":"Small businesses, startups, product launches","buttonText":"Start Project"},{"title":"Corporate Website","price":"$5,000","features":["CMS Drupal/Symfony/React","Up to 15 pages","Blog module","Contact forms","Full SEO optimization","3 months support","Hosting (Hetzner) - 1 year free"],"goodFor":"Medium businesses, corporate sites, service companies","buttonText":"Start Project"},{"title":"E-commerce","price":"$10,000","features":["Shopify or custom solution","Product catalog","Payment integration","Shipping calculation","Customer accounts","6 months support"],"goodFor":"Online stores, marketplaces, B2B platforms","buttonText":"Start Project"}]},"process":{"title1":"How we","title2":"work","steps":[{"number":"01","title":"Discovery","description":"We analyze your requirements, research your market, and create a detailed project roadmap."},{"number":"02","title":"Design","description":"We create a clickable prototype so you can see and feel your project before development."},{"number":"03","title":"Development","description":"Weekly demos and iterations. You're involved at every step of the development process."},{"number":"04","title":"Launch","description":"Deployment, training, and ongoing support. We're with you for the long haul."}]},"faq":{"title1":"Have","title2":"questions?","items":[{"question":"How long does it take to develop a website?","answer":"Development time depends on the project complexity. A landing page takes 2-3 weeks, a corporate site 4-8 weeks, and an e-commerce platform 8-16 weeks. We always provide a detailed timeline before starting work."},{"question":"What technologies do you use?","answer":"We specialize in Drupal for enterprise CMS, React for modern web applications, Shopify for e-commerce, and Symfony for custom backend development. All our projects use Tailwind CSS for beautiful, responsive designs."},{"question":"Do you provide hosting and support?","answer":"Yes! We offer hosting on Hetzner cloud with excellent performance and competitive pricing. All our projects include post-launch support, and we offer ongoing maintenance packages for long-term partnerships."},{"question":"What is your development process?","answer":"We follow an agile approach with 4 main phases: Analysis (requirements and roadmap), Design (clickable prototype), Development (weekly demos and iterations), and Launch (deployment and training). You're involved at every step."},{"question":"How much does it cost?","answer":"Pricing depends on the project scope. Landing pages start from $1,500, corporate websites from $5,000, and e-commerce from $10,000. Contact us for a free estimate - we'll provide a detailed quote within 24 hours."},{"question":"Do you work with international clients?","answer":"Absolutely! We work with clients from Ukraine, Europe, and beyond. All communication can be in English or Ukrainian. We use modern tools for remote collaboration and ensure smooth project delivery regardless of location."}]},"contact":{"pageTitle":"Contact","pageSubtitle":"Ready to start your project? Get in touch.","formTitle":"Get a free estimate","formSubtitle":"3 short steps — and we’ll prepare a preliminary estimate","responseTime":"We reply within 24 hours — usually much sooner.","info":{"email":"Email","phone":"Phone","telegram":"Telegram","location":"Location"},"form":{"name":"Your name","email":"Email","phone":"Phone (optional)","service":"What do you need?","serviceSelect":"Select a service","message":"Tell us about your project","messagePlaceholder":"Describe your project, goals, timeline...","submit":"Send Request","sending":"Sending...","required":"required"},"validation":{"nameRequired":"Name is required","emailRequired":"Email is required","emailInvalid":"Please enter a valid email","serviceRequired":"Please select a service","messageRequired":"Message is required","messageMin":"Message must be at least 10 characters"},"success":{"title":"Request Sent!","message":"Thank you for reaching out. We'll get back to you within 24 hours with a project estimate.","button":"Got it"},"services":["Landing Page","Corporate Website","E-commerce Store","Custom Web Application","Mobile App","Other"]},"services":{"whatIs":"What is","whyChoose":"Why choose","advantages":"Advantages","startProject":"Start Your Project","drupalSites":{"title":"Popular websites built with Drupal","description":"Drupal powers some of the world's most visited and trusted websites. Here are just a few examples of organizations that chose Drupal for their digital presence.","tesla":"Electric vehicles & clean energy","nasa":"Space exploration & research","economist":"Global news & analysis","oxford":"World-leading university","pfizer":"Global pharmaceutical company","bbc":"British broadcasting corporation"},"items":[{"title":"AI Integration","slug":"ai-integration","tagline":"Claude, OpenAI, semantic search. Production AI in your product, not a demo.","shortDescription":"We integrate Anthropic Claude, OpenAI, Google AI, and OpenRouter into real production systems — not toy demos. Custom AI parsers, semantic search with embeddings, RAG pipelines, intelligent automation. The model is a tool. The product is what matters.","storyDescription":"AI integration done properly is unglamorous engineering: prompt design, fallback paths, cost monitoring, eval harnesses, latency budgets. We've been shipping production AI features since 2024 — custom Drupal parsers powered by Claude, FastAPI inference services, semantic search across multilingual content. We know which model to pick for which job, and we know when not to use one at all.","features":[{"title":"Claude · OpenAI · Google AI","description":"Multi-provider integrations through Anthropic SDK, OpenAI SDK, and OpenRouter. We pick the right model for the job — and switch when costs or capabilities shift."},{"title":"Semantic Search","description":"Elasticsearch + multilingual-e5 embeddings for search that understands meaning, not just keywords. Works across languages out of the box."},{"title":"Custom AI Parsers","description":"Production Drupal 11 publishing platforms with bespoke AI parsers extracting structured data from messy real-world inputs — articles, documents, scraped HTML."}],"tags":["Claude","OpenAI","Semantic Search"]},{"title":"Next.js","slug":"nextjs","tagline":"Modern React with SSR, edge runtime, and Server Components. Fast by default.","shortDescription":"Next.js 16 is the React framework for production. Server Components for zero-JS rendering where you don't need it, instant interactivity where you do. SSR for SEO, SSG for speed, edge functions for global performance. We build SaaS dashboards, content platforms, and marketing sites that ship.","storyDescription":"Next.js with the App Router is React in 2026 — Server Components, streaming, async data fetching, and edge-deployed by default. We've built Next.js 16 SaaS products with Symfony backends, Stripe billing, and i18n routing. Fast Core Web Vitals out of the box.","features":[{"title":"App Router + Server Components","description":"Render on the server when it makes sense, hydrate on the client when it doesn't. Smaller bundles, faster pages, better UX."},{"title":"SEO-Ready","description":"SSR and SSG out of the box. Your content is indexable, your pages are fast, your Core Web Vitals are green from day one."},{"title":"Edge Runtime","description":"Deploy globally with Vercel, Cloudflare, or your own infra. Sub-100ms responses anywhere in the world."}],"tags":["Frontend","SSR","React"]},{"title":"FastAPI","slug":"fastapi","tagline":"Python backend for AI services, semantic search, and high-performance APIs.","shortDescription":"FastAPI is the modern Python web framework. We use it for AI inference services, semantic search APIs, and data pipelines that need Python's ecosystem (sentence-transformers, scikit-learn, pandas) alongside production-grade async HTTP performance.","storyDescription":"Some problems are Python-shaped. ML models, NLP pipelines, embeddings, scientific computing — the entire ML ecosystem lives in Python, and trying to do it from PHP or Node is fighting upstream. FastAPI gives us production-grade async HTTP, auto-generated OpenAPI docs, and clean async/await — wrapping Python's strengths in a serious web framework.","features":[{"title":"AI Service Layer","description":"Wrap embeddings models, vector databases, and LLM calls behind a clean async API. The PHP/Node frontend doesn't need to know Python exists."},{"title":"Auto-Documented","description":"OpenAPI/Swagger generated automatically from type hints. Type contracts become API contracts, no separate documentation to drift."},{"title":"Python Ecosystem","description":"NumPy, Pandas, sentence-transformers, Hugging Face Transformers, scikit-learn — the entire ML toolkit, one import away."}],"tags":["Python","AI","API"]},{"title":"Drupal","tagline":"Enterprise CMS for projects that scale. From government portals to large online stores.","shortDescription":"Drupal is the world's leading open-source CMS, powering millions of websites and applications. From government portals to global brands, Drupal provides the flexibility, security, and scalability that enterprise projects demand.","storyDescription":"When your project needs to handle thousands of content types, integrate with dozens of systems, and serve millions of users - that's when Drupal shines. We've been working with Drupal for over 5 years and know how to leverage its full potential for your business.","features":[{"title":"Bank-level Security","description":"Drupal is trusted by governments and major corporations. Regular security updates and a dedicated team of security experts."},{"title":"Unlimited Flexibility","description":"Custom content types, complex workflows, multi-site architecture. Drupal can handle any requirement."},{"title":"Long-term Support","description":"Major versions supported for years. Your investment is protected for the long term."}],"tags":["CMS","Enterprise","Security"]},{"title":"React","tagline":"Modern web applications with exceptional user experience. Fast, responsive, scalable.","shortDescription":"React is the most popular JavaScript library for building user interfaces. Created by Facebook, it powers the front-end of the world's largest applications including Instagram, Netflix, and Airbnb.","storyDescription":"When you need an application that feels like a native app, responds instantly, and provides an exceptional user experience - React is the answer. Combined with modern tools like Next.js, we create applications that are fast, SEO-friendly, and maintainable.","features":[{"title":"Lightning Fast","description":"Virtual DOM and intelligent updates ensure your application is always responsive."},{"title":"Component Architecture","description":"Reusable components mean faster development and consistent design across your application."},{"title":"Massive Ecosystem","description":"Thousands of packages and tools to accelerate development and add any functionality you need."}],"tags":["Frontend","SPA","JavaScript"]},{"title":"Shopify","tagline":"E-commerce solutions that sell. Custom themes, apps, and integrations.","shortDescription":"Shopify powers over 2 million online stores worldwide. From small boutiques to enterprise brands, Shopify provides everything you need to sell online, in-person, and everywhere in between.","storyDescription":"We specialize in creating custom Shopify experiences that stand out. Whether you need a unique theme, custom app, or complex integration - we've got you covered. Our Shopify solutions are designed to convert visitors into customers.","features":[{"title":"Custom Themes","description":"Unique designs that reflect your brand and optimize for conversions."},{"title":"App Development","description":"Custom Shopify apps to extend functionality and automate your business."},{"title":"Integration Expertise","description":"Connect Shopify with your existing systems - ERP, CRM, warehousing, and more."}],"tags":["E-commerce","Online Store","Apps"]},{"title":"Symfony","tagline":"Professional PHP framework for complex business applications and APIs.","shortDescription":"Symfony is a set of reusable PHP components and a web application framework. It's the foundation for many popular projects including Drupal, phpBB, and Laravel. When you need professional-grade PHP development, Symfony is the answer.","storyDescription":"For complex business logic, high-load APIs, and enterprise integrations, Symfony provides the structure and tools you need. We use Symfony to build robust backends that can handle anything your business throws at them.","features":[{"title":"Enterprise Architecture","description":"Clean, maintainable code following best practices and design patterns."},{"title":"API Development","description":"RESTful and GraphQL APIs that are fast, secure, and well-documented."},{"title":"Scalable Performance","description":"Optimized for high-load applications with caching, queues, and more."}],"tags":["PHP","Backend","API"]},{"title":"Tailwind","tagline":"Utility-first CSS for rapid, consistent UI development.","shortDescription":"Tailwind CSS is a utility-first CSS framework that allows you to build custom designs without leaving your HTML. It's become the go-to choice for modern web development, offering incredible speed without sacrificing customization.","storyDescription":"We use Tailwind CSS to create beautiful, responsive designs faster than ever before. No more fighting with CSS specificity or maintaining huge stylesheets. Just clean, consistent, and beautiful interfaces.","features":[{"title":"Rapid Development","description":"Build interfaces 10x faster with utility classes. No more context switching."},{"title":"Perfect Consistency","description":"Design tokens ensure consistent spacing, colors, and typography across your site."},{"title":"Tiny Production CSS","description":"PurgeCSS removes unused styles, resulting in incredibly small CSS bundles."}],"tags":["CSS","Design","UI"]},{"title":"Hetzner","tagline":"European cloud hosting with exceptional value and performance.","shortDescription":"Hetzner is a German cloud provider offering some of the best value in the industry. With data centers in Germany and Finland, they provide excellent performance, privacy compliance, and competitive pricing.","storyDescription":"We host our clients' projects on Hetzner because of their exceptional reliability and value. GDPR compliance, German engineering, and prices that make sense - it's the perfect choice for European businesses.","features":[{"title":"GDPR Compliant","description":"European data centers ensure your data stays in Europe and complies with regulations."},{"title":"Exceptional Value","description":"Get 2-3x more resources for the same price compared to AWS or Google Cloud."},{"title":"Reliable Infrastructure","description":"German engineering meets enterprise-grade reliability. 99.9% uptime guaranteed."}],"tags":["Cloud","Hosting","Europe"]}]},"promo":{"badge":"Built In-House","title":"We Use What We Sell.","subtitle":"Three live products in production. The stack we recommend to clients is the same one running our own apps — so when we say it works, we've already debugged it at 3 AM.","shopcsv":{"title":"ShopCSV","status":"Live · Shopify App Store","description":"Edit thousands of Shopify products in a spreadsheet. No more CSV pain, no more 3 AM bulk-update accidents.","stat":"Rows you can edit at once","cta":"Try Free"},"platform":{"title":"App Platform","status":"Powering our SaaS apps","description":"Multi-tenant infrastructure with OAuth, billing, and isolated tenant data. Built once. Every new app inherits it for free.","stat":"Build once, ship many","cta":"View Platform"},"settle":{"title":"Settle","status":"Live · 4 EVM L2 chains","description":"Crypto invoicing for freelancers. Stablecoin payments straight to your wallet. No banks. No borders. No 3-day SWIFT.","stat":"L2s · Base · Polygon · Arb · OP","cta":"Visit Settle"},"lab":{"title":"Your Idea Here","status":"Draft · Yours to ship","description":"Got a SaaS idea you wish existed? We build production products end-to-end — from the architecture call to the systemd unit running it at 4 AM.","stat":"Card on this page","cta":"Pitch Us"}},"shopcsv":{"subtitle":"Our Shopify App","title1":"Shop","title2":"CSV","description":"Powerful CSV import/export tool for Shopify stores. Bulk edit products, manage inventory, and automate your workflow.","features":["Bulk product import/export","Inventory management","Scheduled imports","Custom field mapping"],"cta":"Try ShopCSV"},"symfonyApp":{"badge":"Built with Symfony","title":"Shopify App Platform","subtitle":"Multi-app platform powered by Symfony 7.2","description":"We built a complete Shopify App Platform using Symfony 7.2 as the backend framework. This demonstrates our expertise in building robust, scalable SaaS applications with enterprise-grade PHP technology.","feature1":"Latest PHP framework","feature2":"Database management","feature3":"OAuth integration","feature4":"Modern UI/UX","architecture":"Application Architecture","cta":"View Platform"},"reactPortfolio":{"badge":"Built with React","title":"Our React Projects","description":"We use React to build modern, fast, and interactive web applications. Here's what we've created with React technology.","projects":{"devmotion":{"title":"DevMotion Studio","description":"This very website you're viewing. Built with React 19, Vite 7, and Tailwind CSS v4.","tech":["React 19","Vite 7","Tailwind CSS 4","React Router 7"]},"shopcsv":{"title":"ShopCSV Frontend","description":"Shopify app interface with spreadsheet-like product editing. React + TypeScript frontend.","tech":["React","TypeScript","AG Grid","Shopify Polaris"]}},"cta":"View Project"},"hetznerPortfolio":{"badge":"Hosted on Hetzner","title":"Projects We Host","description":"All our projects run on Hetzner Cloud infrastructure. Reliable, fast, and GDPR-compliant hosting in European data centers.","projects":{"devmotion":{"title":"DevMotion Studio","description":"This website runs on Hetzner Cloud with automatic backups and 99.9% uptime.","specs":["Hetzner Cloud","Germany DC","Auto Backups","SSL/TLS"]},"shopify":{"title":"Shopify App Platform","description":"Our Shopify apps backend infrastructure with MySQL and Redis caching.","specs":["Hetzner Cloud","MySQL","Redis Cache","Load Balanced"]}},"cta":"View Project"},"tailwindPortfolio":{"badge":"Styled with Tailwind","title":"Tailwind CSS Projects","description":"We use Tailwind CSS for rapid UI development with consistent, beautiful designs. Here are projects showcasing our Tailwind expertise.","projects":{"devmotion":{"title":"DevMotion Studio","description":"Modern agency website with custom animations, responsive design, and dark theme.","features":["Custom Animations","Dark Theme","Responsive","Tailwind v4"]},"shopcsv":{"title":"ShopCSV Interface","description":"Clean, functional UI for Shopify product management with Tailwind components.","features":["Dashboard UI","Data Tables","Form Components","Tailwind v3"]}},"cta":"View Project"},"footer":{"quote":"We are a team of creative professionals united by a shared passion for branding, web design, and digital marketing. Our focus is not just to create beautiful and modern solutions, but to build bold and memorable brands that truly resonate with audiences and deliver tangible results for business.","contactTitle":"Contact us:","phone":"Phone","email":"E-mail"},"notFound":{"title":"Oops! Page not found","subtitle":"Looks like this page went on vacation without telling anyone.","home":"Home","projects":"Projects","contact":"Contact"},"marquee":{"items":["WEB DEVELOPMENT","E-COMMERCE","SHOPIFY APPS"]},"projectPages":{"polylog":{"seoTitle":"Polylog — Multi-Agent Chatbot SaaS Case Study | DevMotion Studio","seoDescription":"How we built Polylog, a multi-tenant, multi-agent chatbot platform — hybrid RAG on Elasticsearch, a visual flow builder, an embeddable widget, and Stripe billing.","title":"Polylog","subtitle":"Case Study","heroDescription":"A multi-tenant, multi-agent chatbot platform. Clients sign up, upload knowledge, design conversation flows visually, embed a widget on their site, and route captured leads to Telegram, WhatsApp, email, or a webhook — all from one dashboard.","visitSite":"Open Live Demo","startProject":"Build Something Similar","stats":[{"value":"100+","label":"Languages (cross-lingual RAG)"},{"value":"9","label":"Dockerized services"},{"value":"Multi","label":"Tenant + multi-agent"},{"value":"RAG","label":"Grounded, cited answers"}],"aboutLabel":"About the Project","aboutTitle":"One widget, many agents, every language","aboutText":["Polylog lets a business stand up a grounded, on-brand chatbot in minutes: upload PDFs, crawl a site, or paste text, design the conversation visually, and drop one script tag on the page. Every row and query is scoped by tenant, and a single widget can host several agents — say a travel consultant and a sales consultant side by side.","Answers are retrieved with hybrid search (BM25 + dense vectors + RRF) over Elasticsearch, reranked by a cross-encoder, with bge-m3 embeddings that work across 100+ languages. A grounding verifier checks every answer against the retrieved sources and blocks ungrounded claims before the visitor ever sees them."],"challengeTitle":"The Challenge","challengeText":"Ship a SaaS where non-technical clients build a trustworthy chatbot themselves — accurate, multilingual, and safe from hallucinations — while keeping every tenant's data strictly isolated and the whole thing self-hostable.","solutionTitle":"The Solution","solutionText":"A FastAPI backend with tenant-scoped Postgres + Elasticsearch, a Next.js dashboard with an @xyflow visual flow builder, a Shadow-DOM widget that streams over SSE, Stripe billing with server-side limits, and a grounding/citation trust layer. Nine services orchestrated with Docker Compose.","featuresLabel":"Key Features","featuresTitle":"Everything you need in one platform","features":[{"title":"Hybrid RAG knowledge","description":"Upload files, crawl URLs, or paste text. BM25 + dense vectors + RRF on Elasticsearch, cross-encoder rerank, bge-m3 cross-lingual embeddings."},{"title":"Visual flow builder","description":"Message, choice, capture, condition, API-call, AI-answer, handoff and intent nodes on an @xyflow canvas, with a live test-run."},{"title":"Embeddable widget","description":"Shadow-DOM isolated, streams answers over SSE, renders choice buttons, lead forms, citations, and product cards — localized to the visitor."},{"title":"Multi-tenant + multi-agent","description":"Every row and query scoped by tenant_id; knowledge and flows scoped by agent_id. One widget can host several agents."},{"title":"Channels & leads","description":"Route captured leads to Telegram, WhatsApp, email, or webhook — credentials encrypted at rest, never in env."},{"title":"Grounding trust layer","description":"A verifier checks each answer against retrieved chunks and blocks ungrounded claims, with inline citations and a guardrail audit log."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop — landing & widget","mobileLabel":"Mobile","techLabel":"Tech Stack","techTitle":"Built on a sharp, modern stack","techDescription":"A typed Python backend, a React 19 dashboard, and Elasticsearch-backed retrieval — orchestrated as nine Dockerized services with Stripe billing.","techItems":[{"icon":"▲","name":"Next.js 15","role":"Dashboard + landing (next-intl)"},{"icon":"⚡","name":"FastAPI","role":"Tenant-scoped Python backend"},{"icon":"🔎","name":"Elasticsearch","role":"Hybrid retrieval (BM25 + dense + RRF)"},{"icon":"💳","name":"Stripe","role":"Checkout + metered plan limits"}],"ctaTitle":"Want a grounded chatbot for your product?","ctaDescription":"Multilingual, multi-agent chat with RAG knowledge, lead capture, and a trust layer that blocks hallucinations — embeddable on any site.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"},"tripsquick":{"seoTitle":"TripsQuick — US Fishing Waters Platform with Depth Maps & AI | DevMotion","seoDescription":"How we built TripsQuick: nine public sources merged into one page per lake or river, depth maps from official USACE and NOAA soundings, 267 fish species, a bite forecast and an AI assistant.","title":"TripsQuick","subtitle":"Case Study","heroDescription":"A platform for US fishing waters: one page per lake or river with official depth maps, fish species, stocking records, boat ramps, a bite forecast and an AI assistant you can simply ask.","visitSite":"Visit Website","startProject":"Build Something Similar","stats":[{"value":"78,208","label":"Lakes, rivers and bays"},{"value":"12,945","label":"Depth charts"},{"value":"267","label":"Fish species"},{"value":"63,127","label":"Fishing spots: ramps, piers & shore"}],"aboutLabel":"About the Project","aboutTitle":"Ask the water","aboutText":["Anglers in the US had the data, but scattered: government soundings, water samples, stocking records and boat ramps live on different sites in different formats.","TripsQuick brings nine public sources together on one page per lake or river. Everything is free; anglers pay for convenience — a week-ahead forecast, alerts, offline depth maps and an unlimited assistant."],"challengeTitle":"The Challenge","challengeText":"Turn raw government data into depth maps people can trust — without ever drawing water deeper than was actually measured.","solutionTitle":"The Solution","solutionText":"A dedicated Python + PostGIS server downloads the raw sources itself (NHD outlines and eHydro soundings), builds depth contours at adaptive intervals and packs them into vector tiles. Where there is no survey, the map stays empty instead of guessing.","featuresLabel":"Key Features","featuresTitle":"What anglers get","features":[{"title":"Depth maps","description":"Contours from official USACE, NOAA and state soundings, never deeper than measured."},{"title":"One page per water","description":"Nine public sources merged: outlines, depths, water samples, stocking records and boat ramps."},{"title":"Bite forecast","description":"A daily bite score and a week-ahead forecast for each lake or river."},{"title":"AI assistant","description":"People ask in plain language; the agent calls the tools itself — water search, forecast, depth map and directions to the ramp."},{"title":"Route to the depth","description":"GraphHopper plots the route from the ramp to the right depth."},{"title":"267 fish species","description":"A species handbook linked to the waters where each fish lives."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop Version","mobileLabel":"Mobile Version","techLabel":"Technology","techTitle":"Built on open data and plain files","techDescription":"Vector tiles are packed with tippecanoe into PMTiles and served by nginx as static files via Range requests — full detail up close, light tiles when zoomed out, no CDN or object storage. The assistant builds its answer cards from that data, so every answer is based on facts, not guesswork.","techItems":[{"name":"Next.js","role":"Web app, EN / ES"},{"name":"Python + PostGIS","role":"Data pipeline, depth contours"},{"name":"tippecanoe → PMTiles","role":"Vector tiles"},{"name":"nginx Range requests","role":"Tile delivery without a CDN"},{"name":"Elasticsearch","role":"Water search"},{"name":"GraphHopper","role":"Routing from ramp to depth"},{"name":"LLM agent","role":"Assistant with tools"}],"ctaTitle":"Have data that should become a product?","ctaDescription":"Public datasets, sensor feeds or a messy archive — we turn raw data into maps, search and AI tools people use every day.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"},"sonrisa-blanca":{"seoTitle":"Sonrisa Blanca — Teeth Whitening Studio Website | DevMotion","seoDescription":"How we designed and built a bold, conversion-focused website for Sonrisa Blanca — a cosmetic teeth whitening studio in Cartagena, Spain.","title":"Sonrisa Blanca","subtitle":"Case Study","heroDescription":"A bold, high-converting landing page for a cosmetic teeth whitening studio in Cartagena, Spain. Eye-catching typography, real before & after results, and seamless online booking — all designed to turn visitors into appointments.","visitSite":"Visit Website","startProject":"Build Something Similar","stats":[{"value":"3","label":"Pricing Tiers"},{"value":"15+","label":"Shades Whiter"},{"value":"98%","label":"Client Satisfaction"},{"value":"60min","label":"Session Duration"}],"aboutLabel":"About the Project","aboutTitle":"Where Confidence Meets a Smile","aboutText":["Sonrisa Blanca needed a website that matches the transformation they deliver — bold, beautiful, and impossible to ignore. No clinical sterility, no stock photos. Just real results, real people, and a clear path to booking.","We crafted a landing page with oversized typography, warm tones, and a visual rhythm that guides the eye from the hero straight to the booking button. Every section answers a question the visitor didn't know they had."],"challengeTitle":"The Challenge","challengeText":"Build a website for a cosmetic service that feels premium without being pretentious. The site had to showcase real before & after results, present three pricing tiers clearly, and drive online bookings — all while standing out in a crowded local market in Spain.","solutionTitle":"The Solution","solutionText":"A scroll-driven narrative that opens with impact, builds trust through testimonials and results, presents pricing with zero ambiguity, and closes with a frictionless booking flow. Bold type and warm photography do the heavy lifting — the design sells the smile.","featuresLabel":"Key Features","featuresTitle":"Designed to Convert","features":[{"title":"Bold Typography","description":"Oversized, expressive type that commands attention and gives the brand an unmistakable identity on every screen size."},{"title":"Before & After Gallery","description":"Real client transformations displayed in a swipeable format that builds immediate trust and desire."},{"title":"Tiered Pricing","description":"Three clear packages (Express, Premium, Exclusive) with transparent pricing that eliminates hesitation."},{"title":"Online Booking","description":"Integrated appointment system that lets visitors book directly from the site — no calls, no friction."},{"title":"Social Proof","description":"Testimonials, team photos, and verified results woven into the page to build credibility at every scroll."},{"title":"Mobile-First Design","description":"Optimized for the way people actually browse — on their phones, in their spare moments, ready to tap and book."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop Version","mobileLabel":"Mobile Version","techLabel":"Technology","techTitle":"Under the Hood","techDescription":"Sonrisa Blanca is built with a lean, modern stack focused on speed and conversion. Every millisecond counts when a visitor is one tap away from booking.","techItems":[{"icon":"⚛️","name":"React","role":"UI Framework"},{"icon":"🎨","name":"Tailwind CSS","role":"Design System"},{"icon":"📱","name":"Responsive","role":"Mobile-First"},{"icon":"🔍","name":"SEO Optimized","role":"Local Search"}],"ctaTitle":"Need a Landing Page That Converts?","ctaDescription":"Whether it's a beauty studio, dental clinic, or any local business — we build landing pages that turn visitors into customers. Clean design, clear messaging, real results.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"},"settle":{"seoTitle":"Settle — Crypto Invoicing SaaS for Freelancers | DevMotion","seoDescription":"How we built Settle, a non-custodial crypto invoicing platform. Freelancers send invoices and get paid in USDC/USDT/DAI on Base, Polygon, Arbitrum, and Optimism.","title":"Settle","subtitle":"Case Study","heroDescription":"Get paid in stablecoins. Without banks. Without waiting. Without borders. A Stripe-grade invoicing SaaS that lets freelancers receive USDC, USDT, and DAI on cheap EVM L2s — fully non-custodial, no smart contracts to audit, no money-transmitter risk.","visitSite":"Visit Website","startProject":"Build Something Similar","stats":[{"value":"4","label":"L2 Chains Live"},{"value":"3","label":"Stablecoins Supported"},{"value":"0%","label":"Custodial Risk"},{"value":"<30s","label":"Payment Detection"}],"aboutLabel":"About the Project","aboutTitle":"Stripe-Grade UX on Crypto Rails","aboutText":["Freelancers in Ukraine, Argentina, Nigeria, Brazil, Mexico, and dozens of other markets lose 5-10% of every invoice to SWIFT delays, frozen wires, and FX spreads. They already use crypto privately — but the tooling is awkward, custodial, or built for Web3 natives.","Settle wraps non-custodial stablecoin payments in the kind of polished, professional UX freelancers expect from Stripe. Funds move directly from client wallet to freelancer wallet. We never touch the money — we just make it feel effortless."],"challengeTitle":"The Challenge","challengeText":"Build a payments product that looks and feels like Stripe, but on EVM L2s. Stay completely non-custodial to avoid money-transmitter regulation. Detect on-chain payments reliably across four chains with different block times and confirmation models. Make it accessible to freelancers who have never used a crypto wallet before.","solutionTitle":"The Solution","solutionText":"Symfony backend that only reads from chains (never writes), React dashboard for invoice management, Twig + viem checkout for the payment flow, and a PHP daemon that polls Base/Polygon/Arbitrum/Optimism for ERC-20 Transfer events. Token contracts are explicitly allowlisted. All amounts use bcmath/gmp — never floats. The architecture is boring on purpose.","featuresLabel":"Key Features","featuresTitle":"Built for Real-World Payments","features":[{"title":"Non-Custodial by Design","description":"Funds move directly from client wallet to freelancer wallet. Settle never holds your money — zero custody risk, zero regulatory ambiguity."},{"title":"Four EVM L2s Live","description":"Base, Polygon, Arbitrum, and Optimism — all on mainnet. Cheap gas (cents per payment), fast finality (5-30 confirmations)."},{"title":"USDC · USDT · DAI","description":"The three stablecoins freelancers actually want. Token contracts are explicitly allowlisted — symbol-only matching is forbidden."},{"title":"On-Chain Listener","description":"A PHP daemon polls every chain via eth_getLogs, decodes ERC-20 Transfer events, and matches them to open invoices in seconds. Idempotent and resumable."},{"title":"PDF Receipts + Email","description":"Every paid invoice triggers a branded PDF receipt delivered via Resend with DKIM, SPF, and DMARC. Plaintext fallback and List-Unsubscribe included."},{"title":"Multilingual Marketing","description":"Full English, Ukrainian, and Spanish marketing site with hreflang, sitemap, JSON-LD, and OG tags. Built for the markets where this product actually matters."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop Version","mobileLabel":"Mobile Version","techLabel":"Technology","techTitle":"Under the Hood","techDescription":"A deliberately boring stack chosen for reliability, longevity, and zero deploy risk. Symfony writes nothing on-chain — it only reads. All transactions are signed in the user's browser. No custom smart contracts. No money-transmitter surface area.","techItems":[{"icon":"🐘","name":"Symfony 7.1","role":"Backend Framework"},{"icon":"⚛️","name":"React + TypeScript","role":"Dashboard SPA"},{"icon":"🦊","name":"viem + wagmi","role":"Wallet Connection"},{"icon":"💎","name":"EVM L2s","role":"Base · Polygon · Arbitrum · Optimism"}],"ctaTitle":"Building a Web3 Product?","ctaDescription":"From DeFi dashboards to crypto-native SaaS, we build production Web3 apps with the same engineering discipline as traditional fintech. No vibes, no rugs, no surprises.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"},"mariasydorchuk":{"seoTitle":"María Sydorchuk Clinic — Multilingual Aesthetic Medicine Site | DevMotion","seoDescription":"How we built a multilingual marketing site for an aesthetic medicine clinic in Cartagena, Spain — Next.js 16, full RTL Arabic support, before/after sliders, and a booking flow that converts.","title":"María Sydorchuk Clinic","subtitle":"Case Study","heroDescription":"A multilingual marketing site for an aesthetic medicine clinic in Cartagena, Spain — built to bridge four languages, two scripts, and a single elegant brand. Bold typography, before/after sliders, and a frictionless booking flow that turns curiosity into appointments.","visitSite":"Visit Website","startProject":"Build Something Similar","stats":[{"value":"4","label":"Languages (ES/EN/UK/AR)"},{"value":"14","label":"Treatment Categories"},{"value":"50+","label":"Priced Treatments"},{"value":"100%","label":"Mobile-First"}],"aboutLabel":"About the Project","aboutTitle":"Beauty That Speaks Every Language","aboutText":["Cartagena is a port city — patients arrive from across the Spanish-speaking world, from Ukraine, from Morocco. María Sydorchuk's clinic needed a site that meets each of them in their own language, including a full right-to-left Arabic experience.","We designed and shipped a Next.js 16 marketing site that does the heavy lifting silently: locale-prefixed routes, automatic Arabic RTL with mirrored chevrons and logical CSS properties, a cream/bronze palette inspired by the clinic's interior, and a transparent price list nobody else in the area dares publish."],"challengeTitle":"The Challenge","challengeText":"Ship a marketing site that handles four languages and two writing directions without feeling like a translation exercise — and turns visitors into booked appointments with a single Name+Phone form, no checkout, no friction.","solutionTitle":"The Solution","solutionText":"Next.js 16 with the App Router, next-intl for locale-prefixed routing, Tailwind v4 with logical CSS properties for clean RTL, Motion-powered page transitions, and an Embla fade-slider hero with responsive desktop/mobile slide sets. Bold Manrope typography paired with Arabic Noto Naskh — one design language across two scripts.","featuresLabel":"Key Features","featuresTitle":"Crafted for Conversion","features":[{"title":"Four Languages, Two Scripts","description":"Spanish, English, Ukrainian, and Moroccan Arabic. The page flips elegantly to RTL with logical CSS properties — no second design, no parallel codebase."},{"title":"Bold Editorial Type","description":"Manrope as the workhorse, Noto Naskh for Arabic, a cream/bronze palette inspired by the clinic interior. Heavy weights, generous spacing, no clinical sterility."},{"title":"Before/After Gallery","description":"Real client transformations in a draggable comparison slider — img-comparison-slider with cream/bronze chrome to match the rest of the site."},{"title":"Transparent Pricing","description":"50+ treatments across 14 categories, every price published in EUR. No 'ask for a quote' anywhere on the site — a competitive differentiator in aesthetic medicine."},{"title":"Embla Hero Slider","description":"Fade transitions with separate desktop (1920×1080) and mobile (750×1000) slide sets that swap at the breakpoint crossover. Wheel-gesture carousels on the homepage cards."},{"title":"Booking Without Forms","description":"One-tap Name + Phone, no checkout, no friction. The booking strip lives in the footer and a dark CTA card mid-page — both convert silently."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop Version","mobileLabel":"Mobile Version","techLabel":"Technology","techTitle":"Under the Hood","techDescription":"A modern Next.js 16 stack built for content sites that need to feel premium, load instantly, and serve four locales — including one that reads right to left. Tailwind v4 logical properties do the heavy lifting; one stylesheet, two scripts, no extra design system.","techItems":[{"icon":"▲","name":"Next.js 16","role":"App Router + i18n"},{"icon":"🎨","name":"Tailwind v4","role":"Logical CSS for RTL"},{"icon":"🌐","name":"next-intl","role":"4 locales, prefixed routing"},{"icon":"💫","name":"Motion","role":"Page transitions + menu"}],"ctaTitle":"Need a Multilingual Site That Converts?","ctaDescription":"Whether it's a clinic, a hospitality brand, or any business serving multiple markets — we ship multilingual sites that feel native in every language, and a booking flow tuned for conversion, not for showing off.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"},"rybalka":{"seoTitle":"Rybalka Club — Fishing Community + AI Assistant | DevMotion","seoDescription":"How we built Rybalka Club for Ukraine — a fishing community with a live spot map, bite forecast, social feed, and an AI assistant grounded in a multilingual knowledge base with source citations.","title":"Rybalka Club","subtitle":"Case Study","heroDescription":"A live fishing radar for Ukraine — spot map, bite forecast, social feed of catches, an 80-species fish handbook, and an AI assistant grounded in a curated knowledge base. Built on a single Elasticsearch cluster, with embeddings-powered semantic search and RAG answers that cite their sources.","visitSite":"Visit Website","startProject":"Build Something Similar","stats":[{"value":"80+","label":"Fish Species"},{"value":"1024","label":"Vector Dimensions"},{"value":"4","label":"Map Layers"},{"value":"0","label":"SQL Databases"}],"aboutLabel":"About the Project","aboutTitle":"Living Radar for Every Fisherman","aboutText":["Ukrainian fishermen needed a single place to see where the bite is on, log their catches, swap tips, and check the rules for their oblast — without an English-language Western app that has no idea their lake exists. We built it.","Every feature, from the Leaflet map with bite forecast to the AI assistant that answers in Ukrainian with source citations, runs on a Symfony 7.4 API talking to a single Elasticsearch cluster (no SQL). RAG search uses multilingual e5-large embeddings via Hugging Face TEI, and OpenAI or Claude for the final answer."],"challengeTitle":"The Challenge","challengeText":"Build a fishing community that does seven things well — map, forecast, social feed, reels, handbook, AI assistant, and admin moderation — on a single Hetzner server, with one storage engine, no SQL, and answers in Ukrainian that cite the source.","solutionTitle":"The Solution","solutionText":"Elasticsearch as the only datastore (every index r_-prefixed), Symfony 7.4 + PHP 8.4 for the API, Next.js 16 with App Router on the front, Leaflet for the radar, Recharts for the admin analytics, and a thin AiClient that fronts both OpenAI and Claude. Embeddings from Hugging Face TEI (1024-dim e5-large) drive hybrid BM25 + kNN + RRF search.","featuresLabel":"Key Features","featuresTitle":"Built for Real Fishermen","features":[{"title":"Live Spot Radar","description":"Leaflet-powered map with catches, spots, heatmap, water-body and depth layers; dark/satellite/relief basemaps and place-search geocoding included."},{"title":"Bite Forecast","description":"Per-spot prediction combining pressure, wind, water temperature, moon phase, solunar, Kp index, and river level — pulled live and presented as a single readable score."},{"title":"AI Assistant (RAG)","description":"Answers fishing questions in Ukrainian by retrieving from r_knowledge with e5-large embeddings, then citing sources [n] in the response. Built to never hallucinate a spot."},{"title":"Single-Engine Backend","description":"One Elasticsearch cluster holds everything — posts, spots, users, embeddings, analytics. No SQL. Indices are r_-prefixed, migrations are additive only."},{"title":"Social + Gamification","description":"Posts, comments, likes, reels (Wave), challenges with auto-tracked tasks, badges, XP and levels. Catch +30, post +10, comment +5."},{"title":"Privacy-Aware Analytics","description":"middleware.ts logs every navigation to r_analytics — no IPs, no PII. Admin dashboard separates humans vs bots, content type, countries (7/30/90-day ranges)."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop Version","mobileLabel":"Mobile Version","techLabel":"Technology","techTitle":"Under the Hood","techDescription":"One Elasticsearch cluster, one Symfony API, one Next.js front-end, one box at Hetzner. Cloudflare in front, TEI for embeddings, Hetzner S3 for media. Boring on purpose — fast, cheap, and easy to reason about.","techItems":[{"icon":"▲","name":"Next.js 16","role":"App Router + SSR/RSC"},{"icon":"🐘","name":"Symfony 7.4","role":"PHP 8.4 API"},{"icon":"🔍","name":"Elasticsearch","role":"Only datastore, r_ prefix"},{"icon":"🧠","name":"TEI + Claude / GPT","role":"RAG with citations"}],"ctaTitle":"Building Community + AI?","ctaDescription":"From community-first portals to RAG-powered AI assistants, we ship platforms that combine real users, real content, and AI that knows its sources. Boring stack, exciting outcomes.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"},"calllens":{"seoTitle":"CallLens — AI Sales-Call Scoring SaaS | DevMotion","seoDescription":"How we built CallLens, an AI SaaS that ingests sales calls, transcribes them with diarization, scores each rep against a scorecard with an LLM, and builds embeddings for semantic search — no GPU required.","title":"CallLens","subtitle":"Case Study","heroDescription":"Every sales call transcribed, scored, and searchable. CallLens ingests a call via signed webhook, transcribes it with diarization, scores each rep against a configurable scorecard with a structured-output LLM, builds embeddings for semantic search, and serves the whole thing through a Cube-powered analytics cabinet. Zero GPUs. Single Hetzner box.","visitSite":"Visit Website","startProject":"Build Something Similar","stats":[{"value":"0","label":"GPUs Required"},{"value":"1024","label":"Vector Dimensions"},{"value":"5","label":"Pipeline Stages"},{"value":"≈€60","label":"Monthly Infra Cost"}],"aboutLabel":"About the Project","aboutTitle":"Sales Coaching That Actually Reads the Calls","aboutText":["Most sales teams record their calls. Almost none get them scored consistently — managers don't have the hours, and scorecards don't enforce themselves. CallLens automates the read: every call ingested, every rep scored, every objection searchable.","We built it on the cheap-by-design principle: all heavy AI runs through external HTTP APIs (Deepgram for STT, OpenAI for scoring + embeddings), no GPU needed, a single Hetzner dedicated server is sufficient. Provider-independent interfaces let you swap or self-host later without touching business logic."],"challengeTitle":"The Challenge","challengeText":"Score sales calls reliably with an LLM that never hallucinates an evidence quote, persist 1024-dim utterance embeddings for semantic search at scale, give managers a Cube-powered analytics cabinet — and do it all on a single Hetzner server with one Docker stack and no GPU.","solutionTitle":"The Solution","solutionText":"Symfony 7.4 + PHP 8.5 backed by PostgreSQL 17 + pgvector (HNSW), API Platform generating OpenAPI 3.1, a Messenger pipeline that walks each call through transcribe → score → embed states (idempotent, retryable), Cube as the semantic analytics layer, and a Next.js 15 cabinet on top. The scorer enforces structured JSON output and validates every evidence quote against the actual transcript.","featuresLabel":"Key Features","featuresTitle":"Built for the Sales Manager","features":[{"title":"Webhook + Manual Ingest","description":"HMAC-signed webhooks from any telephony/CRM (Twilio, Binotel, Ringostat, Bitrix24) plus manual upload via REST. Idempotent by tenant + external call ID."},{"title":"Diarized Transcription","description":"Deepgram for STT with per-channel labelling for dual-channel audio and provider diarization for mono. Word timings persisted on every utterance."},{"title":"LLM Scoring with Evidence","description":"Per-criterion scoring with strict JSON schema, an evidence quote per score, and the quote validated to appear in the transcript. No vibes scoring."},{"title":"Semantic Search","description":"1024-dim pgvector embeddings on every utterance, HNSW index, tenant-scoped ANN. Ask 'where did the rep handle objections' and get the actual moments."},{"title":"Cube Analytics","description":"Pre-aggregated dashboards on Postgres — avg score per agent, trend over time, top objections, score distribution. No second search engine for reports."},{"title":"Configurable Audio Retention","description":"keep, delete-after-processing, or delete-after-N-days, per tenant. Scheduler sweeps run nightly; transcripts and scores remain even after audio is deleted."}],"screenshotsLabel":"Screenshots","screenshotsTitle":"See It in Action","desktopLabel":"Desktop Version","mobileLabel":"Mobile Version","techLabel":"Technology","techTitle":"Under the Hood","techDescription":"Single Docker stack, single Hetzner box, single Postgres. All heavy AI work goes through external APIs behind narrow interfaces — swap providers in a config line, or move to self-hosted GPU later when the cost curve crosses over (~215k audio-minutes/month).","techItems":[{"icon":"🐘","name":"Symfony 7.4","role":"PHP 8.5 API + Workflow"},{"icon":"🐘","name":"PostgreSQL 17","role":"+ pgvector (HNSW)"},{"icon":"▲","name":"Next.js 15","role":"Landing + docs + cabinet"},{"icon":"📊","name":"Cube","role":"Analytics over Postgres"}],"ctaTitle":"Need AI-Native Tooling for Your Team?","ctaDescription":"From sales coaching to support analytics, we ship AI products that get the heavy lifting right — strict structured outputs, evidence-grounded answers, and stacks you can actually operate.","ctaButton":"Get in Touch","ctaViewProjects":"View All Projects"}},"window":{"seoTitle":"Window Calculator Builder — Universal pricing calculator | DevMotion","seoDescription":"Self-hosted window-calculator builder. JSON-driven pricing engine, Monaco-edited configs, admin frontpage editor, SSR by Express. Live at st-ai.com.ua.","badge":"SaaS · React + Express","title":"Window Calculator Builder","tagline":"JSON-driven window pricing for any manufacturer.","subtitle":"Universal window-calculator builder that generates dynamic pricing calculators from JSON configuration. Built for window manufacturers and dealers to spin up customised, branded calculators in minutes.","visitSite":"Visit st-ai.com.ua","chrome":"st-ai.com.ua","stats":[{"value":"JSON","label":"Config-driven"},{"value":"SSR","label":"Express + nginx"},{"value":"Monaco","label":"In-browser editor"},{"value":"Lando","label":"Local dev parity"}],"aboutLabel":"About","aboutTitle":"A calculator engine, not a calculator","aboutText":["Window dealers all need the same thing: a configurator that quotes a price from dimensions, profile system, glass package, hardware, opening type, fittings and discounts. Every dealer builds it from scratch. This one is the engine — a single React + Express app whose entire pricing logic, branding, copy and content is driven by a per-tenant JSON config.","A Monaco-based admin lets a non-developer edit the config in the browser with full schema validation. The same config drives both the customer-facing calculator and the SSR home page (Express renders for SEO; React hydrates for interactivity).","Deployed via GitHub Actions to a Hetzner box, Cloudflare in front. The first tenant — Steko / IDEAL / Deceuninck profile dealer — is live in production at st-ai.com.ua."],"challengeTitle":"Challenge","challengeText":"Window dealers need bespoke calculators every quarter (new profile lines, new glass packages, new manufacturer discounts). Hard-coding each variant would cost a week of dev time per tenant.","solutionTitle":"Solution","solutionText":"Single React + Express app whose entire pricing logic (window types, profiles, glass packages, dimensions, options, formulas, currency) lives in one JSON config per tenant. New tenant = new config file. Monaco editor + schema validation in the admin.","featuresLabel":"What ships","featuresTitle":"Six pieces holding it together","features":[{"title":"JSON-driven calculator","description":"Every window type, profile, glass package, dimension and pricing formula lives in one config file. New tenant = one JSON, no code change."},{"title":"Monaco config editor","description":"In-browser JSON editor with schema validation, syntax highlighting and live preview. Non-developers can edit a tenant config from the admin panel."},{"title":"SSR homepage","description":"Express renders the homepage server-side for SEO; React hydrates on top for interactivity. Per-tenant frontpage sections (profile catalogue, glass packages, gallery, contact)."},{"title":"Admin frontpage editor","description":"Drag-to-reorder section editor with image uploads (10 MB cap), live preview, and per-section content (titles, body text, images, prices)."},{"title":"Auto-deploy via GitHub Actions","description":"Push to main → typecheck + build + rsync to Hetzner + nginx reload. Cloudflare Origin cert for HTTPS. Single SSH step."},{"title":"Lando local dev parity","description":"Same nginx + Node + JSON storage stack runs locally via Lando. App at window.lndo.site, API at api.window.lndo.site. Zero \"works on my machine\" drift."}],"techLabel":"Tech","techTitle":"React 18 + Express 4 + Monaco","techDescription":"Tight, boring stack on purpose. Vite for the SPA, Express for the SSR + JSON CRUD API, Tailwind for styling, Zustand for state, Monaco for the config editor.","tech":[{"icon":"⚛️","name":"React 18 + TypeScript","role":"SPA + admin · Zustand · React Router"},{"icon":"⚡","name":"Vite 5","role":"Frontend build · HMR"},{"icon":"🟢","name":"Express 4","role":"JSON CRUD API + SSR routes (/ssr/*)"},{"icon":"🎨","name":"Tailwind v3 + Lucide","role":"Per-tenant theme via CSS vars"},{"icon":"📝","name":"Monaco editor","role":"In-admin JSON config editor with schema"},{"icon":"☁️","name":"Hetzner + Cloudflare","role":"Origin cert, GitHub Actions deploy"}],"ctaTitle":"Need a calculator for your product line?","ctaDescription":"Windows, doors, garage doors, kitchen cabinets, custom prefab — anything with dimensions × material × options × discount. JSON-driven means new tenants ship in a day.","ctaStart":"Start a project","ctaView":"View other work"},"doors":{"seoTitle":"Doors.city — Drupal doors marketplace + Google Ads automation | DevMotion","seoDescription":"Multi-product Drupal commerce site for 109 door models, paired with a Symfony 7 Google Ads automation that runs cost-controlled search campaigns against a single Ukrainian region.","badge":"Drupal commerce · Google Ads automation","title":"Doors.city","tagline":"Doors marketplace + cost-controlled ad automation.","subtitle":"A Drupal commerce site for armoured and interior doors with a custom configurator, paired with a Symfony 7 Google Ads automation that runs cost-controlled Search campaigns against a single Ukrainian region. Target: CPC < 3 UAH, CPA < 120 UAH, zero wasted spend.","visitSite":"Visit doors.city","chrome":"doors.city","stats":[{"value":"109","label":"Door models"},{"value":"< 3 ₴","label":"Target CPC"},{"value":"< 120 ₴","label":"Target CPA"},{"value":"0","label":"Wasted spend"}],"aboutLabel":"About","aboutTitle":"Marketplace + ad engine, wired together","aboutText":["Doors.city is a Drupal commerce site for armoured and interior doors with a custom configurator, delivery price grid, and a constructor (React) that lets buyers design a door before ordering. The catalogue exposes a `/sklad-export.json` feed for downstream tools.","On top of that catalogue sits a Symfony 7 Google Ads automation app that ingests the JSON feed, runs `KeywordPlanIdeaService` against the product names, generates campaign + ad-group + ad-copy candidates, and runs a nightly bid optimiser that pauses any keyword with ≥ 30 clicks and 0 conversions.","The goal isn't 'publish ads' — it's the lowest CPA achievable for one operator running one Ukrainian region. Manual CPC with a negative-keyword library beats PMax until you have ≥ 30 conversions/month to feed Target CPA."],"challengeTitle":"Challenge","challengeText":"Run profitable Google Search Ads for 109 product SKUs against one Ukrainian region without a paid marketer — and keep wasted spend (≥30 clicks, 0 conversions) at zero, automatically.","solutionTitle":"Solution","solutionText":"Drupal commerce + JSON product feed + Symfony 7 Google Ads orchestrator. Keyword Planner via google-ads-php, negative-keyword library, RSA ad copy generated by Claude API (operator confirms before publish), nightly bid optimiser, and gtag.js conversion tracking on the storefront.","featuresLabel":"What's live (or shipping)","featuresTitle":"Nine pieces holding it together","features":[{"title":"Drupal commerce catalogue","description":"109 door models with full taxonomy (material, series, dimensions, price tiers, photos). PHP 8.3, MariaDB, multi-language ready."},{"title":"Door configurator","description":"React SPA mounted on the Drupal site lets buyers configure dimensions, finish, glass, and hardware before quoting. Shares Drupal taxonomy."},{"title":"/sklad-export.json feed","description":"Single endpoint exposes the full catalogue with incremental `?since=` deltas. Used by the Symfony orchestrator and Google Merchant Center (phase 3)."},{"title":"Symfony 7 ads orchestrator","description":"PHP 8.3 + PostgreSQL 16 service running on a separate €4 Hetzner box. Multi-tenant data model: arbitrary Google Ads accounts × source feeds."},{"title":"Keyword Analyzer UI","description":"KeywordPlanIdeaService + GenerateKeywordHistoricalMetrics wrapped in an admin UI showing volume / CPC range / competition / trend per keyword, with curated list saves."},{"title":"Negative-keyword library","description":"Curated negatives (\"дешево\", \"б/у\", \"ремонт\", \"фурнітура\") + per-campaign overrides + auto-suggestions from wasted-spend search-term reports."},{"title":"AI ad copy assistant","description":"Claude API generates RSA headline/description candidates from product metadata. Operator picks from a shortlist; nothing publishes without confirmation."},{"title":"Bid optimisation engine","description":"Nightly rule runner: raise / lower / pause bids by CPA, ROAS, CTR, quality score. Wasted-spend killer: 30 clicks 0 conversions → auto-pause."},{"title":"Conversion tracking","description":"gtag.js on doors.city tracks phone clicks, form submits, and thank-you page views. Feeds back into Target CPA once volume crosses 30 conversions/mo."}],"techLabel":"Stack","techTitle":"Two boxes, one feed","techDescription":"doors.city runs on the existing Drupal host. The Google Ads automation is isolated on its own €4 Hetzner CX22 box so a Symfony deploy can't take the storefront down. PostgreSQL 16, gRPC via php-grpc to the Google Ads API v18+.","tech":[{"icon":"🚪","name":"Drupal 10","role":"Commerce catalogue · taxonomy · PHP 8.3"},{"icon":"⚛️","name":"React constructor","role":"Door configurator mounted on Drupal"},{"icon":"🔌","name":"/sklad-export.json","role":"Incremental catalogue feed"},{"icon":"🐘","name":"Symfony 7.1","role":"Google Ads orchestrator · Doctrine ORM"},{"icon":"🗄️","name":"PostgreSQL 16","role":"Campaign + product mirror"},{"icon":"📊","name":"google-ads-php v18+","role":"gRPC · Keyword Planner · Search Ads"},{"icon":"🤖","name":"Claude API","role":"RSA copy candidate generation"},{"icon":"📈","name":"gtag.js","role":"Phone + form + thank-you conversions"},{"icon":"☁️","name":"Hetzner CX22","role":"Dedicated €4/mo box · isolated from Drupal"},{"icon":"🇺🇦","name":"Ukrainian UI","role":"uk_UA everywhere · English in logs only"}],"ctaTitle":"Need profitable ads on a tight catalogue?","ctaDescription":"Most Google Ads tooling assumes you have a marketing team and PMax-scale budgets. This stack is built for one operator and one region — the cheapest controllable format, automated where it doesn't break attribution.","ctaStart":"Start a project","ctaView":"View other work"}},"seo":{"/portfolio/polylog":{"title":"Polylog — Multi-Agent Chatbot SaaS Case Study | DevMotion Studio","description":"Multi-tenant, multi-agent chatbot platform — hybrid RAG on Elasticsearch, visual flow builder, embeddable widget, Stripe billing. Live demo + case study.","keywords":"Polylog, chatbot SaaS, RAG, Elasticsearch, FastAPI, Next.js, multi-agent, multi-tenant, DevMotion Studio","ogTitle":"Polylog — multi-agent chatbot SaaS","ogDescription":"Multi-tenant, multi-agent chatbot platform — hybrid RAG on Elasticsearch, visual flow builder, embeddable widget, Stripe billing. Live demo + case study.","ogImage":"/images/og/case-polylog.jpg"},"/":{"title":"DevMotion Studio - Web Development Agency | Drupal, React, Shopify","description":"We transform business ideas into digital products that generate profit. Custom web development with Drupal, React, and Shopify. 50+ successful projects. Full development cycle in 4-8 weeks.","keywords":"web development agency, Drupal development, React development, Shopify development, custom web applications, enterprise CMS, e-commerce development","ogTitle":"DevMotion Studio - Web Development Agency","ogDescription":"Transform your business ideas into digital products. Drupal, React, Shopify experts with 50+ successful projects.","ogImage":"/images/og/home-en.jpg"},"/projects":{"title":"Our Projects - Portfolio | DevMotion Studio","description":"Explore 50+ successful web development projects. Corporate websites, e-commerce stores, web portals, and custom applications. Real results for real businesses.","keywords":"web development portfolio, Drupal projects, React projects, e-commerce projects, corporate websites, web portals, case studies","ogTitle":"Our Projects - DevMotion Studio Portfolio","ogDescription":"50+ successful projects. Corporate websites, e-commerce, portals, and custom applications.","ogImage":"/images/og/projects-en.jpg"},"/price":{"title":"Pricing & Services - Web Development Cost | DevMotion Studio","description":"Transparent web development pricing. Landing pages from $1,500, corporate websites from $5,000, e-commerce from $10,000. Fixed cost, no surprises. Get a free estimate in 24 hours.","keywords":"web development pricing, website cost, Drupal development cost, React development price, e-commerce development cost, landing page price","ogTitle":"Web Development Pricing - DevMotion Studio","ogDescription":"Transparent pricing for web development. Landing pages, corporate websites, e-commerce. Fixed cost, no surprises.","ogImage":"/images/og/price-en.jpg"},"/contact":{"title":"Contact Us - Get a Free Estimate | DevMotion Studio","description":"Ready to start your project? Contact DevMotion Studio for a free estimate within 24 hours. Professional web development services in Europe.","keywords":"contact web developer, web development inquiry, free estimate, project consultation, hire web developers","ogTitle":"Contact DevMotion Studio","ogDescription":"Get a free project estimate within 24 hours. Let's discuss your web development needs.","ogImage":"/images/og/contact-en.jpg"},"/services/ai-integration":{"title":"AI Integration Services — Claude, OpenAI, Semantic Search | DevMotion","description":"Production AI integration for real products. Anthropic Claude, OpenAI, Google AI, and OpenRouter. Custom parsers, semantic search with embeddings, RAG pipelines. Not a demo — features that ship.","keywords":"AI integration, Claude API, Anthropic SDK, OpenAI integration, Google AI, OpenRouter, semantic search, embeddings, RAG pipeline, AI development agency","ogTitle":"AI Integration Services — Production AI Features | DevMotion","ogDescription":"Anthropic Claude, OpenAI, semantic search with embeddings. Production AI integration done right.","ogImage":"/images/og/tech-ai-integration-en.jpg"},"/services/nextjs":{"title":"Next.js Development Services — Modern React Framework | DevMotion","description":"Next.js 16 development for production. Server Components, SSR, SSG, and edge runtime. SaaS dashboards, content platforms, marketing sites with fast Core Web Vitals out of the box.","keywords":"Next.js development, Next.js 16, React Server Components, App Router, SSR, SSG, edge runtime, Vercel deployment, modern React framework","ogTitle":"Next.js Development Services | DevMotion Studio","ogDescription":"Modern React with SSR, edge runtime, and Server Components. Fast by default. Built for production.","ogImage":"/images/og/tech-nextjs-en.jpg"},"/services/fastapi":{"title":"FastAPI Development Services — Python for AI & APIs | DevMotion","description":"FastAPI development for AI inference services, semantic search APIs, and high-performance Python backends. Async HTTP, OpenAPI docs, the full ML toolkit one import away.","keywords":"FastAPI development, Python web framework, AI inference API, async Python, OpenAPI Swagger, machine learning API, sentence-transformers, embeddings API","ogTitle":"FastAPI Development Services | DevMotion Studio","ogDescription":"Python backend for AI services and high-performance APIs. Modern async, auto-docs, the ML ecosystem one import away.","ogImage":"/images/og/tech-fastapi-en.jpg"},"/services/drupal":{"title":"Drupal Development Services - Enterprise CMS | DevMotion Studio","description":"Expert Drupal development for enterprise projects. Bank-level security, unlimited flexibility, long-term support. Build scalable websites and applications with Drupal CMS.","keywords":"Drupal development, Drupal agency, enterprise CMS, Drupal 10, custom Drupal modules, Drupal migration","ogTitle":"Drupal Development Services - DevMotion Studio","ogDescription":"Enterprise Drupal development. Bank-level security, unlimited flexibility, scalable architecture.","ogImage":"/images/og/tech-drupal-en.jpg"},"/services/react":{"title":"React Development Services - Modern Web Apps | DevMotion Studio","description":"Professional React development for modern web applications. Fast, interactive, scalable solutions. Single-page applications, dashboards, and complex UIs.","keywords":"React development, React agency, React.js development, single page applications, SPA development, frontend development","ogTitle":"React Development Services - DevMotion Studio","ogDescription":"Modern React development for fast, interactive web applications. SPAs, dashboards, and complex UIs.","ogImage":"/images/og/tech-react-en.jpg"},"/services/shopify":{"title":"Shopify Development Services - E-commerce Solutions | DevMotion","description":"Custom Shopify development for online stores. Theme customization, app development, migration services. Launch your e-commerce business with experts.","keywords":"Shopify development, Shopify agency, Shopify theme development, Shopify app development, e-commerce development","ogTitle":"Shopify Development Services - DevMotion Studio","ogDescription":"Custom Shopify development for successful online stores. Theme customization, apps, and migrations.","ogImage":"/images/og/tech-shopify-en.jpg"},"/services/symfony":{"title":"Symfony Development Services - PHP Framework | DevMotion Studio","description":"Professional Symfony development for complex web applications. API development, enterprise solutions, custom PHP applications with modern architecture.","keywords":"Symfony development, Symfony agency, PHP framework, API development, enterprise PHP, backend development","ogTitle":"Symfony Development Services - DevMotion Studio","ogDescription":"Enterprise Symfony development for complex web applications and APIs.","ogImage":"/images/og/tech-symfony-en.jpg"},"/services/tailwind":{"title":"Tailwind CSS Development - Modern UI Design | DevMotion Studio","description":"Expert Tailwind CSS development for modern, responsive websites. Rapid development, perfect consistency, tiny production CSS. Beautiful interfaces built 10x faster.","keywords":"Tailwind CSS development, CSS framework, responsive design, UI development, frontend design, utility-first CSS","ogTitle":"Tailwind CSS Development - DevMotion Studio","ogDescription":"Modern Tailwind CSS development for responsive, beautiful websites.","ogImage":"/images/og/tech-tailwind-en.jpg"},"/services/hetzner":{"title":"Hetzner Hosting & DevOps Services | DevMotion Studio","description":"Professional Hetzner server setup and DevOps services. Server configuration, deployment automation, monitoring, and maintenance. GDPR compliant European hosting.","keywords":"Hetzner hosting, DevOps services, server setup, deployment automation, cloud hosting, GDPR hosting","ogTitle":"Hetzner Hosting & DevOps - DevMotion Studio","ogDescription":"Professional Hetzner setup and DevOps. Server configuration, deployment, and maintenance.","ogImage":"/images/og/tech-hetzner-en.jpg"},"/portfolio/tripsquick":{"title":"TripsQuick — US Fishing Waters Platform with Depth Maps & AI | DevMotion","description":"How we built TripsQuick: nine public sources merged into one page per lake or river, depth maps from official USACE and NOAA soundings, 267 fish species, a bite forecast and an AI assistant.","keywords":"travel portal, travel website development, destination guides, React travel site, DevMotion Studio case study","ogTitle":"TripsQuick — US Fishing Waters Platform with Depth Maps & AI","ogDescription":"How we built TripsQuick: nine public sources merged into one page per lake or river, depth maps from official USACE and NOAA soundings, 267 fish species, a bite forecast and an AI assistant.","ogImage":"/images/og/case-tripsquick.jpg"},"/portfolio/sonrisa-blanca":{"title":"Sonrisa Blanca — Teeth Whitening Studio Website | DevMotion","description":"How we designed and built a bold, conversion-focused website for Sonrisa Blanca — a cosmetic teeth whitening studio in Cartagena, Spain.","keywords":"teeth whitening website, dental website design, landing page design, conversion optimization, DevMotion Studio case study","ogTitle":"Sonrisa Blanca — Teeth Whitening Studio | DevMotion Studio","ogDescription":"A bold, high-converting landing page for a cosmetic whitening studio. Real results, seamless booking, premium design.","ogImage":"/images/og/case-sonrisa-blanca.jpg"},"/portfolio/settle":{"title":"Settle — Crypto Invoicing SaaS for Freelancers | DevMotion","description":"How we built Settle, a non-custodial crypto invoicing platform. Freelancers send invoices and get paid in USDC/USDT/DAI on Base, Polygon, Arbitrum, and Optimism.","keywords":"crypto invoicing, stablecoin payments, Symfony Web3, freelancer SaaS, USDC payments, EVM L2 development, DevMotion Studio case study","ogTitle":"Settle — Crypto Invoicing SaaS | DevMotion Studio","ogDescription":"Stripe-grade UX for stablecoin invoicing. Non-custodial. Live on Base, Polygon, Arbitrum, Optimism. Built by DevMotion Studio.","ogImage":"/images/og/case-settle.jpg"},"/portfolio/mariasydorchuk":{"title":"María Sydorchuk Clinic — Multilingual Aesthetic Medicine Site | DevMotion","description":"How we built a multilingual marketing site for an aesthetic medicine clinic in Cartagena, Spain — Next.js 16, full RTL Arabic support, before/after sliders, and a booking flow that converts.","keywords":"aesthetic medicine website, Next.js 16, RTL Arabic, multilingual site, Cartagena Spain, clinic marketing site, next-intl, Tailwind v4, DevMotion Studio case study","ogTitle":"María Sydorchuk Clinic — Multilingual Aesthetic Medicine Site | DevMotion","ogDescription":"Four languages, two writing systems, one elegant brand. Next.js 16 with full Arabic RTL and a frictionless booking flow.","ogImage":"/images/og/case-mariasydorchuk.jpg"},"/portfolio/rybalka":{"title":"Rybalka Club — Fishing Community + AI Assistant | DevMotion","description":"How we built Rybalka Club for Ukraine — a fishing community with a live spot map, bite forecast, social feed, and an AI assistant grounded in a multilingual knowledge base with source citations.","keywords":"fishing community Ukraine, Elasticsearch only, RAG AI assistant, e5-large embeddings, Symfony 7.4, Next.js 16, Leaflet map, semantic search, DevMotion Studio case study","ogTitle":"Rybalka Club — Fishing Community + AI Assistant | DevMotion","ogDescription":"Live fishing radar, bite forecast, AI assistant with source citations — on a single Elasticsearch cluster, no SQL.","ogImage":"/images/og/case-rybalka.jpg"},"/portfolio/calllens":{"title":"CallLens — AI Sales-Call Scoring SaaS | DevMotion","description":"How we built CallLens, an AI SaaS that ingests sales calls, transcribes them with diarization, scores each rep against a scorecard with an LLM, and builds embeddings for semantic search — no GPU required.","keywords":"AI sales coaching, call scoring SaaS, Deepgram diarization, LLM scoring, pgvector HNSW, Symfony 7.4, Cube analytics, semantic search, DevMotion Studio case study","ogTitle":"CallLens — AI Sales-Call Scoring SaaS | DevMotion Studio","ogDescription":"Every sales call transcribed, scored, and searchable. Evidence-grounded LLM scoring + pgvector semantic search. No GPU.","ogImage":"/images/og/case-calllens.jpg"},"/portfolio/window":{"title":"Window Calculator Builder — Universal pricing calculator | DevMotion","description":"Self-hosted window-calculator builder. JSON-driven pricing engine, Monaco-edited configs, admin frontpage editor, SSR by Express. Live at st-ai.com.ua.","keywords":"window calculator, configurator, pricing, JSON config, React, Express, Monaco, SaaS, st-ai.com.ua","ogTitle":"Window Calculator Builder — JSON-driven window pricing for any manufacturer.","ogDescription":"Universal window-calculator builder that generates dynamic pricing calculators from JSON configuration. Built for window manufacturers and dealers to spin up customised, branded calculators in minutes","ogImage":"/images/og/case-window.jpg"},"/portfolio/doors":{"title":"Doors.city — Drupal doors marketplace + Google Ads automation | DevMotion","description":"Multi-product Drupal commerce site for 109 door models, paired with a Symfony 7 Google Ads automation that runs cost-controlled search campaigns against a single Ukrainian region.","keywords":"doors.city, Drupal commerce, Google Ads, Symfony, Ukrainian doors, configurator, bid optimisation","ogTitle":"Doors.city — Doors marketplace + cost-controlled ad automation.","ogDescription":"A Drupal commerce site for armoured and interior doors with a custom configurator, paired with a Symfony 7 Google Ads automation that runs cost-controlled Search campaigns against a single Ukrainian r","ogImage":"/images/og/case-doors.jpg"}}}