feat(01-04): layout, routing, API hooks, tipi TypeScript, Dashboard, Settings

- types.ts: CalendarSlot, GeneratedPost, PostResult, JobStatus, Settings, SettingsStatus
- api/client.ts: aggiunto apiGet, apiPost, apiPut, apiDownload, triggerDownload
- api/hooks.ts: 10+ hooks TanStack Query (settings, generate, job polling, CSV export)
- components/Layout.tsx + Sidebar.tsx: sidebar stone/amber palette con 4 nav link
- pages/Dashboard.tsx: banner API key, quick actions link, step guide
- pages/Settings.tsx: form completo (API key password, LLM select, brand, nicchie checkbox)
- App.tsx: 5 route con BrowserRouter basename='/postgenerator', QueryClientProvider, Layout
This commit is contained in:
Michele
2026-03-08 02:23:55 +01:00
parent 60b46cb5c1
commit 738a877d39
11 changed files with 941 additions and 14 deletions

View File

@@ -1,5 +1,11 @@
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { BrowserRouter, Route, Routes } from 'react-router-dom'
import { Layout } from './components/Layout'
import { Dashboard } from './pages/Dashboard'
import { GenerateCalendar } from './pages/GenerateCalendar'
import { GenerateSingle } from './pages/GenerateSingle'
import { OutputReview } from './pages/OutputReview'
import { Settings } from './pages/Settings'
const queryClient = new QueryClient({
defaultOptions: {
@@ -10,25 +16,20 @@ const queryClient = new QueryClient({
},
})
function HomePage() {
return (
<div className="min-h-screen bg-gray-950 text-gray-100 flex items-center justify-center">
<div className="text-center space-y-4">
<h1 className="text-4xl font-bold tracking-tight">PostGenerator</h1>
<p className="text-gray-400 text-lg">Setup completo pronto per la business logic.</p>
</div>
</div>
)
}
function App() {
return (
<QueryClientProvider client={queryClient}>
{/* basename must match the nginx subpath and Vite base config */}
<BrowserRouter basename="/postgenerator">
<Routes>
<Route path="/" element={<HomePage />} />
</Routes>
<Layout>
<Routes>
<Route path="/" element={<Dashboard />} />
<Route path="/genera" element={<GenerateCalendar />} />
<Route path="/genera-singolo" element={<GenerateSingle />} />
<Route path="/risultati/:jobId" element={<OutputReview />} />
<Route path="/impostazioni" element={<Settings />} />
</Routes>
</Layout>
</BrowserRouter>
</QueryClientProvider>
)