Site-ul GScopy în Next.js, pe un VPS propriu
Site bilingv pentru GScopy în Next.js 15 și Tailwind 4, cu descărcări de probă servite de pe un VPS Hetzner.

Am construit site-ul de prezentare pentru GScopy, aplicația noastră desktop pentru cabinete medicale, la gscopy.gxasolutions.com. Site-ul prezintă platforma și fiecare aplicație în parte, are pagini de prețuri și de contact, iar de aici se descarcă versiunea de probă de 7 zile pentru Windows și macOS.

Next.js 15, Tailwind 4 și framer-motion, cu pagini generate static
Stack-ul este:
• Next.js 15 cu App Router și React 19.1 • TypeScript 5.8 • Tailwind CSS 4.1, configurat prin @theme în globals.css • framer-motion 12, cu primitive proprii (Reveal, Stagger, LiftCard, CountUp, FadeIn) care respectă prefers-reduced-motion • fonturi Geist prin next/font, deci niciun request extern pentru ele
Toate paginile de conținut sunt generate static.
Aplicațiile sunt date, nu pagini
Registrul din products.ts descrie fiecare aplicație: slug-ul pe limbă, starea (available sau coming-soon), accentul de culoare, numele fișierelor și versiunile. Navigația, sitemap-ul, JSON-LD-ul, paginile de produs, descărcările și prețurile se generează din el. Pentru o specialitate nouă adaug un id, o intrare în registru și textele în ambele dicționare, iar TypeScript semnalează dacă lipsește o traducere.

Română și engleză, cu slug-uri traduse doar la produse
Produsele au adrese diferite pe limbă, /ro/endoscopie și /en/endoscopy, iar restul rutelor folosesc același slug în ambele limbi, ca URL-urile existente să rămână stabile. Fiecare pagină are metadata proprie, hreflang pentru RO, EN și x-default, canonical, iar imaginea OpenGraph se generează la /api/og. În iulie 2026 am trecut de la un singur produs la o platformă cu câte o aplicație pe specialitate, iar vechile /features și /download redirecționează permanent (301) către pagina de endoscopie.
Fiecare aplicație are propriul JSON-LD
Site-ul publică Organization, WebSite, un SoftwareApplication separat pentru fiecare aplicație, cu id, URL, descriere și disponibilitate proprii, plus ItemList, Product cu ofertele de preț, BreadcrumbList și FAQPage. Pe FAQPage l-am păstrat pentru extragerea de către LLM-uri, pentru că Google nu mai afișează rich results FAQ din mai 2026.

Butoanele de descărcare se activează când urci fișierul pe server
Ruta /api/downloads verifică la runtime dacă instalerul există în folderul de pe server și întoarce URL-ul și dimensiunea. Sunt trei variante, Windows, macOS Apple Silicon și macOS Intel. Caddy le servește cu accept-ranges, deci descărcarea se poate relua. Numele fișierelor se schimbă din .env și se aplică la runtime, iar versiunea afișată pe card cere redeploy. Un produs marcat coming-soon rămâne blocat chiar dacă fișierul există.
Rulează pe un VPS Hetzner, în spatele Caddy și pm2
Codul stă în /home/deploy/gscopy, procesul pm2 se numește gscopy și ascultă pe portul 3100, iar Caddy ia certificatul Let's Encrypt automat. Site-ul rulează pe același server ca gxasolutions.com. Scriptul scripts/deploy.sh face rsync, npm ci, build și restart pm2, apoi cere cu curl pagina /ro de pe 127.0.0.1:3100.
Prețul de lansare nu apare ca preț tăiat
Directiva Omnibus cere ca reducerea să nu fie falsă, așa că 1.000 € apare ca preț de lansare, cu prețul standard de 2.000 € alături. Pachetul costă 1.600 € față de 2.199 € standard, iar reperul „cumpărate separat" (4.000 €) se calculează din prețul standard, deci nu rămâne în urmă. Footer-ul are ANPC și SAL. SOL/ODR lipsește, pentru că platforma UE a fost desființată la 20 iulie 2025.

Formularul de contact a dispărut, au rămas telefonul și emailul
Prima versiune, din 23 iunie 2026, avea un API de contact pe Resend. Versiunea de acum afișează telefonul și emailul, cu butoane tel: și mailto: citite din CONTACT în site.ts.
Sursa are 47 de fișiere în src și circa 6.300 de linii. Istoricul Git are 11 commit-uri, între 23 iunie și 13 iulie 2026.