Initialize FishIQ development foundation

This commit is contained in:
reaper
2026-08-28 10:56:14 -05:00
commit 3eb459a307
81 changed files with 1642 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
FROM node:24-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml* ./
RUN corepack enable && pnpm install
COPY . .
EXPOSE 5173
CMD ["pnpm", "dev", "--host", "0.0.0.0"]
+2
View File
@@ -0,0 +1,2 @@
<div id="root"></div><script type="module" src="/src/main.tsx"></script>
+2
View File
@@ -0,0 +1,2 @@
{"name":"@fishiq/web","private":true,"version":"0.1.0","type":"module","scripts":{"dev":"vite","build":"tsc -b && vite build","typecheck":"tsc --noEmit"},"dependencies":{"@vitejs/plugin-react":"latest","vite":"latest","typescript":"latest","react":"latest","react-dom":"latest"},"devDependencies":{"@types/react":"latest","@types/react-dom":"latest"}}
+11
View File
@@ -0,0 +1,11 @@
import React from "react";
import { createRoot } from "react-dom/client";
import "./styles.css";
const features = ["Condition-aware plan", "Tackle you already own", "Explainable confidence", "Ask Professor Finn"];
function App() {
return <main><nav><strong>FishIQ</strong><span>Plan smarter. Fish better.</span></nav><section className="hero"><div><p className="eyebrow">YOUR FISHING INTELLIGENCE</p><h1>Know where to go.<br/>Know what to throw.</h1><p className="lede">Turn water, weather, season, and your own tackle into a practical fishing plan.</p><button>Plan a trip</button></div><aside><p className="eyebrow">SATURDAY · LAKE EUFAULA</p><h2>Largemouth bass</h2><div className="score">82 <small>Bite score</small></div><p>Start on wind-blown secondary points at first light. Shift to shaded cover as the sun rises.</p></aside></section><section className="features">{features.map((f, i) => <article key={f}><b>0{i+1}</b><h3>{f}</h3></article>)}</section></main>;
}
createRoot(document.getElementById("root")!).render(<React.StrictMode><App /></React.StrictMode>);
+3
View File
@@ -0,0 +1,3 @@
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=Manrope:wght@600;800&display=swap');
:root{font-family:'DM Sans',sans-serif;color:#eaf4ef;background:#071c1b}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 80% 10%,#174e46 0,transparent 34%),#071c1b}main{max-width:1180px;margin:auto;padding:28px}nav{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ffffff24;padding:0 0 22px}nav strong{font:800 25px Manrope;color:#72e3ad}nav span{color:#a8bdb7}.hero{min-height:600px;display:grid;grid-template-columns:1.5fr 1fr;gap:64px;align-items:center}.eyebrow{color:#72e3ad;font-size:12px;font-weight:700;letter-spacing:.18em}h1{font:800 clamp(48px,7vw,84px)/.98 Manrope;margin:18px 0}.lede{font-size:20px;line-height:1.6;color:#b8c9c4;max-width:600px}button{background:#72e3ad;color:#06201b;border:0;border-radius:99px;padding:15px 25px;font-weight:700;font-size:16px}aside{background:#f2f0e8;color:#102b28;padding:34px;border-radius:24px;box-shadow:0 30px 70px #0005}aside .eyebrow{color:#237c62}.score{font:800 70px Manrope;color:#197457;border-block:1px solid #183a3125;padding:20px 0}.score small{font:600 14px 'DM Sans';color:#526763}.features{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.features article{border-top:1px solid #ffffff33;padding:20px 4px}.features b{color:#72e3ad;font-size:12px}.features h3{font:600 16px Manrope}@media(max-width:760px){.hero{grid-template-columns:1fr;padding:70px 0}.features{grid-template-columns:1fr 1fr}nav span{display:none}}
+2
View File
@@ -0,0 +1,2 @@
{"compilerOptions":{"target":"ES2022","useDefineForClassFields":true,"lib":["ES2022","DOM","DOM.Iterable"],"allowJs":false,"skipLibCheck":true,"esModuleInterop":true,"allowSyntheticDefaultImports":true,"strict":true,"forceConsistentCasingInFileNames":true,"module":"ESNext","moduleResolution":"Bundler","resolveJsonModule":true,"isolatedModules":true,"noEmit":true,"jsx":"react-jsx"},"include":["src"],"references":[]}
+4
View File
@@ -0,0 +1,4 @@
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
export default defineConfig({ plugins: [react()] });