220 lines
5.8 KiB
Markdown
220 lines
5.8 KiB
Markdown
# Frontend Setup Finalized ✅
|
|
|
|
## What's Working
|
|
|
|
- ✅ Tailwind CSS v4 (CSS-first approach - no config file needed)
|
|
- ✅ Shadcn/ui Card component with Tailwind classes
|
|
- ✅ Responsive grid layout (1/2/3 columns)
|
|
- ✅ Article data fetching from backend
|
|
- ✅ Loading, error, and empty states
|
|
- ✅ TypeScript path aliases (`@/`)
|
|
- ✅ shadcn/ui configuration (components.json)
|
|
|
|
## Configuration
|
|
|
|
### Tailwind CSS (v4 CSS-First)
|
|
All Tailwind configuration is in `src/index.css` using directives:
|
|
```css
|
|
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@theme {
|
|
@custom-colors;
|
|
@dark-mode;
|
|
}
|
|
```
|
|
|
|
**No `tailwind.config.js` file needed** - this is the v4 CSS-first approach.
|
|
|
|
### Shadcn/ui
|
|
- **components.json** - shadcn/ui configuration file
|
|
- **components/ui/card.tsx** - Card component with all sub-components
|
|
- **components/ui/button.tsx** - Button component (installed but unused)
|
|
- **utils.ts** - `cn()` utility for merging classes
|
|
|
|
### TypeScript
|
|
- Path aliases configured in `tsconfig.json`:
|
|
```json
|
|
"paths": {
|
|
"@/*": ["./src/*"]
|
|
}
|
|
```
|
|
|
|
## Current Files
|
|
|
|
### Core App Files
|
|
- `src/App.tsx` - Main app component with article grid
|
|
- `src/main.tsx` - App entry point
|
|
- `src/lib/api.ts` - Backend API functions
|
|
- `src/lib/query-client.ts` - TanStack Query configuration
|
|
|
|
### UI Components
|
|
- `src/components/ui/card.tsx` - Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter
|
|
- `src/components/ui/button.tsx` - Button component (ready to use)
|
|
|
|
### Configuration
|
|
- `src/index.css` - Tailwind v4 CSS-first configuration
|
|
- `components.json` - shadcn/ui config
|
|
- `tsconfig.json` - TypeScript config with path aliases
|
|
- `vite.config.ts` - Vite configuration
|
|
|
|
## Restart Required
|
|
|
|
**Restart dev server:**
|
|
```bash
|
|
cd frontend
|
|
# Press Ctrl+C to stop current server
|
|
npm run dev
|
|
```
|
|
|
|
**Refresh browser:** Ctrl+Shift+R (hard refresh)
|
|
|
|
## What You Should See
|
|
|
|
- Clean white/light gray background
|
|
- "Placebo.mk" header in large bold text
|
|
- "Sarcastic news from Macedonia" subtitle
|
|
- Grid of article cards (responsive: 1/2/3 columns)
|
|
- Each card has:
|
|
- White background with border and subtle shadow
|
|
- Title (truncated to 2 lines)
|
|
- Excerpt (truncated to 3 lines)
|
|
- Content preview (truncated to 4 lines)
|
|
- Footer with date and view count
|
|
- Hover effect adds shadow to cards
|
|
|
|
## Adding More Shadcn/ui Components
|
|
|
|
### Using CLI (Recommended)
|
|
```bash
|
|
cd frontend
|
|
npx shadcn@latest add [component-name]
|
|
```
|
|
|
|
### Available Components
|
|
- `badge` - For article tags
|
|
- `button` - Interactive elements (already installed)
|
|
- `input` - Search input
|
|
- `dialog` - Article detail modal
|
|
- `dropdown-menu` - Menus and filters
|
|
- `tabs` - Content organization
|
|
- `separator` - Visual separation
|
|
- `skeleton` - Loading placeholder
|
|
- `pagination` - Navigate articles
|
|
- `alert` - Notifications
|
|
|
|
### Manual Example
|
|
|
|
If CLI doesn't work, manual component setup:
|
|
|
|
1. Visit https://ui.shadcn.com/docs/components/[component]
|
|
2. Copy component code
|
|
3. Create: `frontend/src/components/ui/[component].tsx`
|
|
4. Import and use: `import { Component } from '@/components/ui/component'`
|
|
|
|
## Styling Customization
|
|
|
|
### Theme Colors (Edit `src/index.css`)
|
|
|
|
```css
|
|
:root {
|
|
--background: 0 0% 100%; /* Background color */
|
|
--foreground: 222.2 84% 4.9%; /* Text color */
|
|
--primary: 222.2 47.4% 11.2%; /* Primary brand color */
|
|
--card: 0 0% 100%; /* Card background */
|
|
/* ... more variables */
|
|
}
|
|
```
|
|
|
|
### Tailwind v4 CSS-First Configuration
|
|
|
|
The `@theme` directive allows you to customize Tailwind directly in CSS:
|
|
|
|
```css
|
|
@theme {
|
|
--color-primary: oklch(0.647 0.22 0.23);
|
|
--font-sans: "Inter", sans-serif;
|
|
--animate-fade-in: fade-in 0.5s ease-out;
|
|
}
|
|
```
|
|
|
|
## Known Limitations (Current Setup)
|
|
|
|
- No article detail page (clicking on cards doesn't navigate)
|
|
- No search functionality
|
|
- No category/tag filtering
|
|
- No dark mode toggle
|
|
- No pagination
|
|
- No article creation/editing (that's Strapi CMS)
|
|
|
|
## Quick Start Checklist
|
|
|
|
After restarting dev server:
|
|
|
|
- [ ] See styled article cards
|
|
- [ ] Check responsiveness (resize browser)
|
|
- [ ] Test dark mode (add toggle later)
|
|
- [ ] Add more articles in Strapi
|
|
- [ ] Add shadcn/ui components as needed
|
|
|
|
## Adding Article Detail Page
|
|
|
|
If you want to add navigation when clicking on cards:
|
|
|
|
1. Create `src/components/ArticleDetail.tsx`:
|
|
```tsx
|
|
import { useQuery } from '@tanstack/react-query'
|
|
import * as api from './lib/api'
|
|
import { Card, CardHeader, CardTitle, CardContent } from './components/ui/card'
|
|
import { Button } from './components/ui/button'
|
|
|
|
export function ArticleDetail({ articleId }: { articleId: string }) {
|
|
const { data, isLoading, error } = useQuery({
|
|
queryKey: ['article', articleId],
|
|
queryFn: () => api.fetchArticleById(articleId),
|
|
enabled: !!articleId,
|
|
})
|
|
|
|
if (isLoading) return <div>Loading...</div>
|
|
if (error) return <div>Error</div>
|
|
if (!data) return null
|
|
|
|
return (
|
|
<Card className="max-w-3xl mx-auto">
|
|
<CardHeader>
|
|
<CardTitle>{data.title}</CardTitle>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div dangerouslySetInnerHTML={{ __html: data.content }} />
|
|
</CardContent>
|
|
<Button onClick={() => window.history.back()}>
|
|
Back to Articles
|
|
</Button>
|
|
</Card>
|
|
)
|
|
}
|
|
```
|
|
|
|
2. Update `App.tsx` to track selected article:
|
|
```tsx
|
|
const [selectedArticle, setSelectedArticle] = useState<string | null>(null)
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. **Restart dev server and verify styling works**
|
|
2. **Add more articles** in Strapi CMS and sync
|
|
3. **Add shadcn/ui components** as needed
|
|
4. **Implement article detail view**
|
|
5. **Add search and filtering**
|
|
6. **Add dark mode toggle**
|
|
7. **Add pagination**
|
|
|
|
## Resources
|
|
|
|
- [Tailwind CSS v4 Docs](https://tailwindcss.com/docs/installation/using-postcss-css)
|
|
- [Shadcn/ui Documentation](https://ui.shadcn.com)
|
|
- [TanStack Query Docs](https://tanstack.com/query/latest)
|
|
- [Radix UI](https://www.radix-ui.com/)
|