GxA Solutions
Înapoi la portofoliu
Web

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.

Site-ul GScopy în Next.js, pe un VPS propriu

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.

Pagina de start GScopy cu titlul despre câte o aplicație pentru fiecare specialitate și butoanele Vezi aplicațiile și Descarcă TRIAL

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.

Pagina GScopy Endoscopy cu titlul Programul pentru clinica ta de endoscopie digestivă și macheta aplicației

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.

Secțiunea cu cele patru funcții ale aplicației de endoscopie, pe pagina de produs

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.

Pagina de preț cu pachetul Ambele aplicații și prețul de lansare

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.