diff --git a/.gitignore b/.gitignore index ba398a1..43e9bd6 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ coverage/ .turso/ + diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 6e36a09..29807ab 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -241,3 +241,4 @@ Available sizes: **Ready to deploy?** Follow the steps above and you'll be live in minutes! 🚀 + diff --git a/QUICKSTART.md b/QUICKSTART.md index 94933e1..2b561e5 100644 --- a/QUICKSTART.md +++ b/QUICKSTART.md @@ -80,3 +80,4 @@ See [DEPLOYMENT.md](./DEPLOYMENT.md) for detailed instructions and troubleshooti **Total: $5/month** + diff --git a/backend/Procfile b/backend/Procfile index 572b477..336013d 100644 --- a/backend/Procfile +++ b/backend/Procfile @@ -1,2 +1,3 @@ web: npm start + diff --git a/backend/src/config/database.ts b/backend/src/config/database.ts index cb721ad..7000d1d 100644 --- a/backend/src/config/database.ts +++ b/backend/src/config/database.ts @@ -30,3 +30,4 @@ export async function setSetting(key: string, value: string): Promise { } + diff --git a/backend/src/config/env.ts b/backend/src/config/env.ts index 1763964..202868a 100644 --- a/backend/src/config/env.ts +++ b/backend/src/config/env.ts @@ -59,3 +59,4 @@ export const env = { }; + diff --git a/backend/src/controllers/channels.controller.ts b/backend/src/controllers/channels.controller.ts index 3a1f104..0ec20b4 100644 --- a/backend/src/controllers/channels.controller.ts +++ b/backend/src/controllers/channels.controller.ts @@ -272,3 +272,4 @@ export async function refreshChannel(req: AuthRequest, res: Response) { } + diff --git a/backend/src/middleware/auth.ts b/backend/src/middleware/auth.ts index 9a2e9a7..7014a4d 100644 --- a/backend/src/middleware/auth.ts +++ b/backend/src/middleware/auth.ts @@ -43,3 +43,4 @@ export function authMiddleware( } + diff --git a/backend/src/middleware/errorHandler.ts b/backend/src/middleware/errorHandler.ts index bb5c1b5..20ae962 100644 --- a/backend/src/middleware/errorHandler.ts +++ b/backend/src/middleware/errorHandler.ts @@ -23,3 +23,4 @@ export function errorHandler( } + diff --git a/backend/src/middleware/rateLimiter.ts b/backend/src/middleware/rateLimiter.ts index 7d704d7..f4c2f00 100644 --- a/backend/src/middleware/rateLimiter.ts +++ b/backend/src/middleware/rateLimiter.ts @@ -29,3 +29,4 @@ export const apiLimiter = rateLimit({ }); + diff --git a/backend/src/routes/auth.routes.ts b/backend/src/routes/auth.routes.ts index 78c1392..d925a16 100644 --- a/backend/src/routes/auth.routes.ts +++ b/backend/src/routes/auth.routes.ts @@ -14,3 +14,4 @@ router.get('/me', authMiddleware, getCurrentUser); export default router; + diff --git a/backend/src/routes/channels.routes.ts b/backend/src/routes/channels.routes.ts index c11fa86..7fc323c 100644 --- a/backend/src/routes/channels.routes.ts +++ b/backend/src/routes/channels.routes.ts @@ -16,3 +16,4 @@ router.put('/:id/refresh', authMiddleware, refreshChannel); export default router; + diff --git a/backend/src/routes/videos.routes.ts b/backend/src/routes/videos.routes.ts index b68b358..a1bf971 100644 --- a/backend/src/routes/videos.routes.ts +++ b/backend/src/routes/videos.routes.ts @@ -14,3 +14,4 @@ router.post('/refresh', authMiddleware, refreshVideos); export default router; + diff --git a/backend/src/services/youtube.service.ts b/backend/src/services/youtube.service.ts index 2e08881..3baa2e6 100644 --- a/backend/src/services/youtube.service.ts +++ b/backend/src/services/youtube.service.ts @@ -147,3 +147,4 @@ export function formatDuration(isoDuration: string): string { } + diff --git a/backend/src/setup/initialSetup.ts b/backend/src/setup/initialSetup.ts index 94d8c96..e03c852 100644 --- a/backend/src/setup/initialSetup.ts +++ b/backend/src/setup/initialSetup.ts @@ -28,3 +28,4 @@ export async function createInitialAdmin() { } + diff --git a/backend/src/types/index.ts b/backend/src/types/index.ts index 11f2a90..0f800f5 100644 --- a/backend/src/types/index.ts +++ b/backend/src/types/index.ts @@ -60,3 +60,4 @@ export interface ApiResponse { } + diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 3986ae2..cbedd0e 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -18,3 +18,4 @@ } + diff --git a/frontend/index.html b/frontend/index.html index fd7e8b0..4ccdaf8 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -13,3 +13,4 @@ + diff --git a/frontend/src/App.css b/frontend/src/App.css index 0d5dc57..7bd6127 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -60,3 +60,4 @@ body { } + diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 11de22c..1895e0c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -39,3 +39,4 @@ function App() { export default App; + diff --git a/frontend/src/components/ChannelManager/ChannelManager.css b/frontend/src/components/ChannelManager/ChannelManager.css index 3e739ce..1ee7c03 100644 --- a/frontend/src/components/ChannelManager/ChannelManager.css +++ b/frontend/src/components/ChannelManager/ChannelManager.css @@ -173,3 +173,4 @@ } + diff --git a/frontend/src/components/ChannelManager/ChannelManager.tsx b/frontend/src/components/ChannelManager/ChannelManager.tsx index 0bc9cb3..595ace1 100644 --- a/frontend/src/components/ChannelManager/ChannelManager.tsx +++ b/frontend/src/components/ChannelManager/ChannelManager.tsx @@ -113,3 +113,4 @@ export function ChannelManager() { } + diff --git a/frontend/src/components/ErrorBoundary.tsx b/frontend/src/components/ErrorBoundary.tsx index bc562d3..862c4bd 100644 --- a/frontend/src/components/ErrorBoundary.tsx +++ b/frontend/src/components/ErrorBoundary.tsx @@ -41,3 +41,4 @@ export class ErrorBoundary extends React.Component { } + diff --git a/frontend/src/components/ProtectedRoute.tsx b/frontend/src/components/ProtectedRoute.tsx index 4d23923..cceee59 100644 --- a/frontend/src/components/ProtectedRoute.tsx +++ b/frontend/src/components/ProtectedRoute.tsx @@ -20,3 +20,4 @@ export function ProtectedRoute({ children }: ProtectedRouteProps) { } + diff --git a/frontend/src/components/SearchFilter/SearchFilter.css b/frontend/src/components/SearchFilter/SearchFilter.css index f8e2c1f..d5a9f61 100644 --- a/frontend/src/components/SearchFilter/SearchFilter.css +++ b/frontend/src/components/SearchFilter/SearchFilter.css @@ -109,3 +109,4 @@ } + diff --git a/frontend/src/components/SearchFilter/SearchFilter.tsx b/frontend/src/components/SearchFilter/SearchFilter.tsx index 6301a24..017fda8 100644 --- a/frontend/src/components/SearchFilter/SearchFilter.tsx +++ b/frontend/src/components/SearchFilter/SearchFilter.tsx @@ -81,3 +81,4 @@ export function SearchFilter({ } + diff --git a/frontend/src/components/VideoCard/VideoCard.css b/frontend/src/components/VideoCard/VideoCard.css index 6b37148..f28f393 100644 --- a/frontend/src/components/VideoCard/VideoCard.css +++ b/frontend/src/components/VideoCard/VideoCard.css @@ -102,3 +102,4 @@ } + diff --git a/frontend/src/components/VideoCard/VideoCard.tsx b/frontend/src/components/VideoCard/VideoCard.tsx index 67d5dfc..50282c0 100644 --- a/frontend/src/components/VideoCard/VideoCard.tsx +++ b/frontend/src/components/VideoCard/VideoCard.tsx @@ -62,3 +62,4 @@ export function VideoCard({ video, onClick }: VideoCardProps) { } + diff --git a/frontend/src/components/VideoGrid/VideoGrid.css b/frontend/src/components/VideoGrid/VideoGrid.css index 7c07baf..8b0e5c5 100644 --- a/frontend/src/components/VideoGrid/VideoGrid.css +++ b/frontend/src/components/VideoGrid/VideoGrid.css @@ -154,3 +154,4 @@ } + diff --git a/frontend/src/components/VideoGrid/VideoGrid.tsx b/frontend/src/components/VideoGrid/VideoGrid.tsx index 359962a..bd9b928 100644 --- a/frontend/src/components/VideoGrid/VideoGrid.tsx +++ b/frontend/src/components/VideoGrid/VideoGrid.tsx @@ -118,3 +118,4 @@ export function VideoGrid({ } + diff --git a/frontend/src/components/VideoPlayer/VideoPlayer.css b/frontend/src/components/VideoPlayer/VideoPlayer.css index 435ea32..453e361 100644 --- a/frontend/src/components/VideoPlayer/VideoPlayer.css +++ b/frontend/src/components/VideoPlayer/VideoPlayer.css @@ -80,3 +80,4 @@ } + diff --git a/frontend/src/components/VideoPlayer/VideoPlayer.tsx b/frontend/src/components/VideoPlayer/VideoPlayer.tsx index 242a527..11822f2 100644 --- a/frontend/src/components/VideoPlayer/VideoPlayer.tsx +++ b/frontend/src/components/VideoPlayer/VideoPlayer.tsx @@ -43,3 +43,4 @@ export function VideoPlayer({ videoId, onClose }: VideoPlayerProps) { } + diff --git a/frontend/src/hooks/useAuth.tsx b/frontend/src/hooks/useAuth.tsx index 4279a83..a828ee1 100644 --- a/frontend/src/hooks/useAuth.tsx +++ b/frontend/src/hooks/useAuth.tsx @@ -70,3 +70,4 @@ export const useAuth = () => { }; + diff --git a/frontend/src/hooks/useChannels.ts b/frontend/src/hooks/useChannels.ts index b740fb5..9e44a06 100644 --- a/frontend/src/hooks/useChannels.ts +++ b/frontend/src/hooks/useChannels.ts @@ -54,3 +54,4 @@ export function useChannels() { } + diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index bdd6477..d08c2ee 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -9,3 +9,4 @@ ReactDOM.createRoot(document.getElementById('root')!).render( ) + diff --git a/frontend/src/pages/AdminPage.css b/frontend/src/pages/AdminPage.css index e682e67..8fb54b5 100644 --- a/frontend/src/pages/AdminPage.css +++ b/frontend/src/pages/AdminPage.css @@ -24,3 +24,4 @@ } + diff --git a/frontend/src/pages/AdminPage.tsx b/frontend/src/pages/AdminPage.tsx index 302f381..ba20ca2 100644 --- a/frontend/src/pages/AdminPage.tsx +++ b/frontend/src/pages/AdminPage.tsx @@ -15,3 +15,4 @@ export function AdminPage() { } + diff --git a/frontend/src/pages/LoginPage.css b/frontend/src/pages/LoginPage.css index 89f0695..537c6ad 100644 --- a/frontend/src/pages/LoginPage.css +++ b/frontend/src/pages/LoginPage.css @@ -98,3 +98,4 @@ } + diff --git a/frontend/src/pages/LoginPage.tsx b/frontend/src/pages/LoginPage.tsx index 58e5dd4..685b7da 100644 --- a/frontend/src/pages/LoginPage.tsx +++ b/frontend/src/pages/LoginPage.tsx @@ -73,3 +73,4 @@ export function LoginPage() { } + diff --git a/frontend/src/services/apiClient.ts b/frontend/src/services/apiClient.ts index 5234af4..cd581f8 100644 --- a/frontend/src/services/apiClient.ts +++ b/frontend/src/services/apiClient.ts @@ -120,3 +120,4 @@ export const videosApi = { }; + diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts index 561bc8c..8009c40 100644 --- a/frontend/src/vite-env.d.ts +++ b/frontend/src/vite-env.d.ts @@ -8,3 +8,4 @@ interface ImportMeta { readonly env: ImportMetaEnv } + diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 6d04e4b..e9a4b39 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -21,3 +21,4 @@ } + diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json index b72368a..6d33670 100644 --- a/frontend/tsconfig.node.json +++ b/frontend/tsconfig.node.json @@ -10,3 +10,4 @@ } + diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 158335c..1f97208 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -9,3 +9,4 @@ export default defineConfig({ }) + diff --git a/navbar-refactor-plan.md b/navbar-refactor-plan.md index 7c5b36d..1705742 100644 --- a/navbar-refactor-plan.md +++ b/navbar-refactor-plan.md @@ -227,3 +227,4 @@ But this requires lifting state to App level and prop drilling. **Complexity:** Medium (URL params + responsive styling) + diff --git a/package.json b/package.json index c2f4673..5522c11 100644 --- a/package.json +++ b/package.json @@ -44,3 +44,4 @@ "tsx": "^4.7.0" } } +