# SaveInMed Website Site institucional do SaveInMed, desenvolvido com Fresh (Deno framework). ## 🎯 Propósito Este é o site institucional e de marketing do SaveInMed, responsável por: - Apresentar a plataforma para novos usuários - Landing pages de produtos e serviços - Captura de leads - Informações sobre a empresa - Blog e conteúdo educacional - SEO otimizado para aquisição orgânica ## 🚀 Tecnologias - **Fresh v2** - Framework web moderno para Deno - **Deno 2** - Runtime JavaScript/TypeScript seguro - **Preact** - Biblioteca UI leve (3KB) - **Tailwind CSS** - Framework CSS utility-first - **Islands Architecture** - Hidratação parcial para performance máxima ## 📋 Funcionalidades ### Landing Pages - Página inicial institucional - Páginas de produtos - Casos de uso - Preços e planos ### Captura de Leads - Formulários de contato - Newsletter signup - Demonstração agendada - Download de materiais ### Conteúdo - Blog posts - Artigos educacionais - FAQ - Documentação pública ### SEO - Meta tags otimizadas - Open Graph - Schema.org markup - Sitemap XML - robots.txt ## 🏗️ Arquitetura (Fresh Islands) ``` website/ ├── routes/ # Rotas baseadas em arquivo │ ├── index.tsx # Página inicial │ ├── about.tsx # Sobre nós │ ├── contact.tsx # Contato │ ├── blog/ │ │ ├── index.tsx # Lista de posts │ │ └── [slug].tsx # Post individual │ └── api/ # API routes │ └── newsletter.ts # Endpoint de newsletter ├── islands/ # Componentes interativos (client-side) │ ├── FlowTicker.tsx # Ticker animado │ ├── LeadForm.tsx # Formulário de captura │ └── ContactForm.tsx # Formulário de contato ├── components/ # Componentes estáticos (SSR) │ ├── Header.tsx │ ├── Footer.tsx │ └── Hero.tsx ├── static/ # Arquivos estáticos │ ├── styles.css │ ├── logo.svg │ └── images/ ├── fresh.config.ts # Configuração do Fresh ├── deno.json # Configuração do Deno └── README.md ``` ## 🔧 Configuração ### Variáveis de Ambiente Crie um arquivo `.env` na raiz do projeto: ```bash # API Backend API_URL=https://api.saveinmed.com # Email (para formulários) SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=noreply@saveinmed.com SMTP_PASSWORD=your-password # Analytics GOOGLE_ANALYTICS_ID=G-XXXXXXXXXX # Ambiente DENO_ENV=development ``` ### Pré-requisitos - Deno 2.0 ou superior ## 🏃 Execução Local ```bash # Executar em modo desenvolvimento deno task dev # Site estará disponível em http://localhost:8000 ``` ## 🏗️ Build e Produção ```bash # Build para produção deno task build # Executar build de produção deno task start # Preview deno task preview ``` ## 🎨 Islands Architecture Fresh utiliza a arquitetura de "islands" para hidratação parcial: ### Componentes Estáticos (SSR) Renderizados no servidor, sem JavaScript no cliente: ```tsx // components/Hero.tsx export function Hero() { return (

SaveInMed

Marketplace B2B Farmacêutico

); } ``` ### Islands (Interativos) Componentes que precisam de JavaScript no cliente: ```tsx // islands/LeadForm.tsx import { useState } from "preact/hooks"; export default function LeadForm() { const [email, setEmail] = useState(""); const handleSubmit = async (e: Event) => { e.preventDefault(); await fetch("/api/newsletter", { method: "POST", body: JSON.stringify({ email }), }); }; return (
setEmail(e.currentTarget.value)} placeholder="Seu email" />
); } ``` ## 🛣️ Roteamento Fresh usa roteamento baseado em arquivos: ``` routes/ ├── index.tsx → / ├── about.tsx → /about ├── contact.tsx → /contact ├── blog/ │ ├── index.tsx → /blog │ └── [slug].tsx → /blog/:slug └── api/ └── newsletter.ts → /api/newsletter ``` ## 📡 API Routes ```typescript // routes/api/newsletter.ts import { Handlers } from "$fresh/server.ts"; export const handler: Handlers = { async POST(req) { const { email } = await req.json(); // Salvar email no banco de dados await saveToNewsletter(email); return new Response(JSON.stringify({ success: true }), { headers: { "Content-Type": "application/json" }, }); }, }; ``` ## 🎨 Estilização O projeto usa Tailwind CSS com configuração customizada: ```typescript // tailwind.config.ts export default { theme: { extend: { colors: { primary: '#3b82f6', secondary: '#8b5cf6', }, }, }, }; ``` ## 🔍 SEO ### Meta Tags ```tsx export default function BlogPost({ data }) { return ( <> {data.title} | SaveInMed Blog
{/* ... */}
); } ``` ### Sitemap ```typescript // routes/sitemap.xml.ts export const handler: Handlers = { GET() { const sitemap = ` https://saveinmed.com/ 1.0 `; return new Response(sitemap, { headers: { "Content-Type": "application/xml" }, }); }, }; ``` ## ⚡ Performance Fresh é otimizado para performance máxima: - **Zero JavaScript por padrão**: Apenas islands têm JS - **Edge rendering**: Deploy em edge para latência mínima - **Streaming SSR**: Renderização progressiva - **Automatic code splitting**: Por rota e island - **Preact**: Apenas 3KB de runtime ### Lighthouse Score Esperado - Performance: 95-100 - Accessibility: 95-100 - Best Practices: 95-100 - SEO: 95-100 ## 🚀 Deploy ### Deno Deploy (Recomendado) ```bash # Instalar deployctl deno install -Arf https://deno.land/x/deploy/deployctl.ts # Deploy deployctl deploy --project=saveinmed-website ``` ### Docker ```bash # Build docker build -t saveinmed-website:latest . # Run docker run -p 8000:8000 saveinmed-website:latest ``` ### Outras Plataformas - **Cloudflare Pages**: Suporte para Deno - **Netlify**: Via Deno runtime - **Vercel**: Via Deno runtime ## 📧 Formulários de Contato ```tsx // islands/ContactForm.tsx export default function ContactForm() { const handleSubmit = async (e: Event) => { e.preventDefault(); const formData = new FormData(e.target as HTMLFormElement); await fetch("/api/contact", { method: "POST", body: JSON.stringify(Object.fromEntries(formData)), }); alert("Mensagem enviada!"); }; return (