Files

8.0 KiB
Raw Permalink Blame History

SGE Medical Group

Updated 2026-09-05 for initial website creation request.

User brief

Source: https://api.meshkee.com/api/v1/public/ai-prompts/sge-medical-group/basic-create/5d795143f6b147770dabe5bb Build only homepage, about us, contact us in Persian, RTL, Next.js, flat design with original palette. Use existing sgemed.com content and logo, supplied ImageSamples. Download all PDFs and associate products. Update this context when future prompts materially change the project.

Project

Application in site/. Actual Next.js 16 App Router, React 19, static export to out/. Commands in site: npm run dev / npm run build. Sites starter retained with unused component dependencies; Next.js replaces vinext execution per explicit brief. Cyan, white, charcoal; local Iran Sans font; responsive layout. No shopping checkout or invented contact form. Routes: /, /about-us, /contact-us. Product catalog is on homepage. Original contact-page mobile 09389221460 chosen over truncated footer number.

Sources and assets

Original: https://www.sgemed.com/, /about-us, /contact-us. Original public PDF URLs all return 404; recovered 29 of 30 from asset host https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/sgemed_Emdko4jewE/assets/uploads/. Catalog and original provenance/status: site/app/catalog.json. Local PDFs: site/public/pdfs. Missing Barcode-and-sticky-indicator-of-type-4.pdf: product requests catalog via contact page instead of broken download. Do not claim all 30 were downloaded. Local original logo and footer logo in public/images, font public/iran-sans.ttf. Supplied louis-reed photo used as laboratory.jpg and national-cancer-institute-fd0b-Bl4cFc photo as care.jpg. Preserve ImageSamples originals. Site ID stored in site/.openai/hosting.json, static output out. Never store hosting credentials in repository.

Update: compact banners and product mega menu (2026-09-05)

User requested shorter page-title row with background pattern and header product mega menu. Shared about/contact banner now uses compact spacing and a fading CSS medical-cross pattern. ProductMenu client component exposes all 30 catalog items grouped in four columns (responsive), using 29 local PDFs and the existing contact fallback. Click/tap toggle, Escape with focus restoration, outside-click and focus-leave dismissal; disclosure semantics with standard navigation links. Local preview remains the active review surface.

Update: English title typography (2026-09-05)

English titles now use locally hosted Montserrat regular/bold from the original site's font CDN. Applied to English eyebrows, category subtitles, image caption, educational labels, footer brand, and product titles including mega menu. Latin unicode ranges and Iran fallback preserve Persian typography. Assets: public/fonts/montserrat-{regular,bold}.ttf.

Update: contact section redesign (2026-09-05)

Replaced oversized contact cards with two compact office/expert panels using aligned label/number rows and line icons. Email, Telegram and non-interactive fax use a secondary horizontal strip that stacks on small screens. Preserved all original contact values and link actions. Montserrat used for Latin numbers and English labels; Persian remains Iran Sans. Local preview is the current review surface.

Update: lighter title background (2026-09-05)

Shared page title background changed to #f8fcfd. Medical-cross pattern increased to .34 opacity and 1.5px strokes with a wider fade, keeping the text area quiet.

Update: mega-menu Persian heading font (2026-09-05)

Explicitly set mega-menu category headings and heading label to Iran Sans; downloaded matching real bold face to public/fonts/iran-sans-bold.ttf and registered weight 700 to avoid synthetic bold. English catalog titles retain Montserrat.

Update: animated homepage slider (2026-09-05)

HeroSlider client component replaces static hero. Three supplied photos with image wipe/zoom and staggered text reveal; 6.5-second autoplay, direct slide selection, previous/next, pause. Hover and hidden document suspend rotation; keyboard focus/manual selection pauses. Reduced-motion disables animations/autoplay. Uses existing source-grounded themes and navigation. Added research.jpg from supplied hans-reniers photo.

Backend integration (2026-09-05)

Requested brief: https://api.meshkee.com/api/v1/public/ai-prompts/sge-medical-group/backend/b40e612a9009a7c365b47980 Canonical API https://api.meshkee.com/api/v1, tenant sgemed.com resolves id 3. Docs https://api.meshkee.com/docs/website/openapi.json. Uses tenant resolution before public APIs. Live blogs currently empty and favicon null (verified); fallback /favicon.svg. No contact messages sent to live backend during tests.

Next.js now requires a server (removed output:export) for live blog detail routes, metadata, contact proxy, and cookie authentication. The project uses Vinext to build its Next.js App Router routes for Cloudflare Workers: npm run build emits dist/server/index.js with a callable fetch; npm run dev / npm start use Vinext. Old out/ is stale and must not be deployed. Removed static output from hosting manifest.

New routes: /blog, /blog/{id}/{titleSlug}, /api/contact POST, /api/account GET, /api/logout POST. All outbound tenant requests are fixed to sgemed.com. Blog HTML sanitized with sanitize-html, canonical links use id/titleSlug. Blog list/detail schema beyond envelope is not specified in docs and live list empty; content mapping supports title, content/text, summary/excerpt, coverUrl/imageUrl; verify against real article when one is published. No fabricated articles. Contact validation has required title/name/text and optional email/cellNumber; Persian phone digits normalized. Confirmed success resets form, shows inline message and dismissible toast; failure retains values. Tests mock submission to avoid sending messages.

User confirmed parent-domain cookies meshkee_customer_access_token and meshkee_customer_refresh_token on .sgemed.com; no token handoff. Server validates via /auth/me and refreshes 401 via /auth/refresh. No tokens are sent to client JSON. Logout expires both shared cookies; no documented backend revoke endpoint. Localhost and private Sites domain cannot read .sgemed.com cookies, so production SSO can only be verified under sgemed.com. customer.sgemed.com did not resolve during inspection. Account role/profile/admin URL clarification pending; admin is not assumed from an unverified claim.

Backend access rules confirmed (2026-09-05)

Profile URL: https://customer.sgemed.com/profile. Website management URL: https://business.sgemed.com/website. The account endpoint treats a user as eligible for the management link only if they are a super-admin (isSuperAdmin or roles includes super_admin) or hold a membership for the resolved SGE tenant (businessId/id matches tenant ID) with isOwner: true or teamRole admin, editor, or viewer. This decision is made server-side from the verified /auth/me response; it is never inferred from client data.

SEO update (2026-09-05)

Source brief: https://api.meshkee.com/api/v1/public/ai-prompts/sge-medical-group/seo/700d7980abbb7920d7a95085. Added page-specific titles, descriptions and canonical URLs for home, about, contact and blog; root metadata now includes Persian Open Graph defaults and metadataBase for sgemed.com. Blog detail already uses CMS title/content summary and canonical /blog/{id}/{titleSlug}. The build-time sitemap generator now publishes public/meshkee/sitemap-config.json with change frequencies and priorities for public static routes only. Do not add robots.txt or sitemap.xml: production nginx proxies Meshkee’s generated versions. After deployment, run Website → Settings → Sync sitemap config in the Meshkee business dashboard to include the static routes.

Build-generated public/meshkee/sitemap-config.json lists public static pages. Do not ship sitemap.xml or robots.txt because production nginx delegates them to Meshkee. Test commands: node --experimental-strip-types --test tests/contact.test.mjs; node --test tests/backend.test.cjs.