FIT Labs — Coming soon
+diff --git a/.gitignore b/.gitignore index 16d54bb..df86edd 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,9 @@ pnpm-debug.log* # jetbrains setting folder .idea/ + +# superpowers brainstorm +.superpowers/ + +# claude +.claude/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3616810 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM node:lts AS build +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +FROM nginx:alpine AS runtime +COPY ./nginx/nginx.conf /etc/nginx/nginx.conf +COPY --from=build /app/dist /usr/share/nginx/html +EXPOSE 8080 diff --git a/astro.config.mjs b/astro.config.mjs index e762ba5..a2fc1d4 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,5 +1,11 @@ // @ts-check import { defineConfig } from 'astro/config'; +import tailwindcss from '@tailwindcss/vite'; -// https://astro.build/config -export default defineConfig({}); +export default defineConfig({ + output: 'static', + site: 'https://fitlabs.dev', + vite: { + plugins: [tailwindcss()], + }, +}); \ No newline at end of file diff --git a/docs/superpowers/plans/2026-03-14-fitlabs-landing.md b/docs/superpowers/plans/2026-03-14-fitlabs-landing.md new file mode 100644 index 0000000..c0d0188 --- /dev/null +++ b/docs/superpowers/plans/2026-03-14-fitlabs-landing.md @@ -0,0 +1,1097 @@ +# FIT Labs Landing Page — Implementation Plan + +> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Build and deploy a single-page landing for fitlabs.dev — FactorIT's AI innovation incubator. + +**Architecture:** Astro static site with Tailwind CSS. 6 sections in a single `index.astro` page composed from Astro components. No client-side framework — vanilla JS only for navbar scroll, scroll-reveal animations, and gradient mesh. Deployed via Docker (nginx) on Coolify. + +**Tech Stack:** Astro 5.x, Tailwind CSS 4.x, Lucide Icons (SVG inline), Docker + nginx + +**Spec:** `docs/superpowers/specs/2026-03-14-fitlabs-landing-design.md` + +--- + +## File Structure + +``` +fitlabs.dev/ +├── public/ +│ ├── LogoFIT.png # Logo (already exists at project root) +│ └── favicon.svg # Favicon +├── src/ +│ ├── layouts/ +│ │ └── Layout.astro # Base HTML:
meta/SEO/fonts, slot +│ ├── components/ +│ │ ├── Navbar.astro # Sticky navbar with scroll behavior +│ │ ├── Hero.astro # Gradient mesh hero +│ │ ├── About.astro # "Qué es FIT Labs" section +│ │ ├── Capabilities.astro # 5 capabilities list +│ │ ├── Differentiator.astro # Two-column differentiator +│ │ ├── Contact.astro # CTA section +│ │ └── Footer.astro # Footer +│ ├── pages/ +│ │ └── index.astro # Composes all sections +│ └── styles/ +│ └── global.css # Tailwind imports, custom animations, gradient mesh +├── nginx/ +│ └── nginx.conf # Nginx config for static serving +├── Dockerfile # Multi-stage: node build → nginx serve +├── astro.config.mjs # Astro config (static output) +├── package.json +├── tsconfig.json +└── .gitignore +``` + +--- + +## Chunk 1: Project Setup & Base Layout + +### Task 1: Scaffold Astro Project + +**Files:** +- Create: `package.json`, `astro.config.mjs`, `tsconfig.json`, `.gitignore` + +- [ ] **Step 1: Initialize Astro project** + +```bash +cd /Users/felipearentsen/Claude/code/fitlabs.dev +npm create astro@latest . -- --template minimal --no-install --typescript strict +``` + +- [ ] **Step 2: Add Tailwind CSS integration** + +```bash +npx astro add tailwind -y +``` + +- [ ] **Step 3: Configure astro.config.mjs for static output** + +```javascript +// astro.config.mjs +import { defineConfig } from 'astro/config'; +import tailwindcss from '@astrojs/tailwind'; + +export default defineConfig({ + output: 'static', + integrations: [tailwindcss()], + site: 'https://fitlabs.dev', +}); +``` + +- [ ] **Step 4: Update .gitignore** + +Add to `.gitignore`: +``` +node_modules/ +dist/ +.astro/ +.superpowers/ +``` + +- [ ] **Step 5: Move logo to public/** + +```bash +cp /Users/felipearentsen/Claude/code/fitlabs.dev/LogoFIT.png /Users/felipearentsen/Claude/code/fitlabs.dev/public/LogoFIT.png +``` + +- [ ] **Step 6: Install dependencies and verify build** + +```bash +npm install +npm run build +``` + +Expected: Build succeeds, `dist/` directory created. + +- [ ] **Step 7: Initialize git and commit** + +```bash +git init +git add -A +git commit -m "chore: scaffold Astro project with Tailwind CSS" +``` + +--- + +### Task 2: Global Styles & Tailwind Config + +**Files:** +- Create: `src/styles/global.css` +- Modify: `tailwind.config.mjs` + +- [ ] **Step 1: Configure Tailwind with custom colors and fonts** + +```javascript +// tailwind.config.mjs +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], + theme: { + extend: { + colors: { + dark: { + bg: '#0a0a1a', + surface: '#0f172a', + footer: '#06080f', + }, + light: { + bg: '#f0f9ff', + surface: '#e0e7ff', + base: '#f8fafc', + }, + brand: { + blue: '#0369a1', + violet: '#7c3aed', + cyan: '#06b6d4', + }, + }, + fontFamily: { + sans: ['Inter', 'system-ui', 'sans-serif'], + }, + }, + }, + plugins: [], +}; +``` + +- [ ] **Step 2: Create global.css with Tailwind imports and custom animations** + +```css +/* src/styles/global.css */ +@import 'tailwindcss'; + +@theme { + --font-sans: 'Inter', system-ui, sans-serif; +} + +/* Gradient mesh animation for hero */ +@keyframes mesh-drift-1 { + 0%, 100% { transform: translate(0, 0); } + 33% { transform: translate(30px, -20px); } + 66% { transform: translate(-20px, 15px); } +} + +@keyframes mesh-drift-2 { + 0%, 100% { transform: translate(0, 0); } + 33% { transform: translate(-25px, 20px); } + 66% { transform: translate(15px, -30px); } +} + +@keyframes mesh-drift-3 { + 0%, 100% { transform: translate(0, 0); } + 33% { transform: translate(20px, 25px); } + 66% { transform: translate(-30px, -10px); } +} + +/* Scroll reveal */ +.reveal { + opacity: 0; + transform: translateY(20px); + transition: opacity 0.6s ease, transform 0.6s ease; +} + +.reveal.visible { + opacity: 1; + transform: translateY(0); +} + +/* Capability list slide-in */ +.slide-in { + opacity: 0; + transform: translateX(-20px); + transition: opacity 0.5s ease, transform 0.5s ease; +} + +.slide-in.visible { + opacity: 1; + transform: translateX(0); +} + +/* Gradient text utility */ +.gradient-text { + background: linear-gradient(135deg, #0369a1, #7c3aed); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} +``` + +- [ ] **Step 3: Verify build** + +```bash +npm run build +``` + +Expected: Build succeeds. + +- [ ] **Step 4: Commit** + +```bash +git add tailwind.config.mjs src/styles/global.css +git commit -m "feat: add Tailwind config with brand colors and global animations" +``` + +--- + +### Task 3: Base Layout with SEO + +**Files:** +- Create: `src/layouts/Layout.astro` + +- [ ] **Step 1: Create Layout.astro with meta tags and Open Graph** + +```astro +--- +// src/layouts/Layout.astro +interface Props { + title?: string; + description?: string; +} + +const { + title = 'FIT Labs — Innovación con IA by FactorIT', + description = 'Soluciones de inteligencia artificial enterprise que escalan. La incubadora de innovación de FactorIT.', +} = Astro.props; +--- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FIT Labs — Coming soon
+Hero placeholder
++ FactorIT Innovation Lab +
++ Donde la inteligencia artificial se convierte en soluciones enterprise que escalan +
+ + Explorar capacidades ↓ + ++ Sobre nosotros +
++ FIT Labs es donde exploramos, prototipamos y llevamos a producción soluciones + de inteligencia artificial para empresas. Nacimos del ADN tecnológico de + FactorIT para resolver los desafíos más complejos con IA — no entregamos + demos, entregamos sistemas que funcionan en el mundo real. +
++ Capacidades +
+{cap.description}
++ Nuestro enfoque +
+ ++ Nos apasiona la IA, pero nos obsesiona que funcione. Cada proyecto que + sale de FIT Labs está pensado para integrarse en operaciones reales, + soportar carga real, y crecer cuando tu negocio crece. +
+{val.text}
++ Cuéntanos qué problema quieres resolver. Nosotros vemos cómo la IA puede ayudarte. +
+ + Conversemos → + + +