A very performant and light (2mb in memory) link shortener and tracker. Written in Rust and React and uses Postgres/SQLite.
1import { ThemeProvider } from "@/components/theme-provider" 2import { LinkForm } from './components/LinkForm' 3import { LinkList } from './components/LinkList' 4import { AuthForms } from './components/AuthForms' 5import { AuthProvider, useAuth } from './context/AuthContext' 6import { Button } from "@/components/ui/button" 7import { Toaster } from './components/ui/toaster' 8import { ModeToggle } from './components/mode-toggle' 9import { useState } from 'react' 10 11function AppContent() { 12 const { user, logout } = useAuth() 13 const [refreshCounter, setRefreshCounter] = useState(0) 14 15 const handleLinkCreated = () => { 16 setRefreshCounter(prev => prev + 1) 17 } 18 19 return ( 20 <div className="min-h-screen bg-background flex flex-col"> 21 <header className="border-b"> 22 <div className="container max-w-6xl mx-auto flex h-16 items-center justify-between px-4"> 23 <h1 className="text-2xl font-bold">SimpleLink</h1> 24 <div className="flex items-center gap-4"> 25 {user ? ( 26 <> 27 <span className="text-sm text-muted-foreground">Welcome, {user.email}</span> 28 <Button variant="outline" size="sm" onClick={logout}> 29 Logout 30 </Button> 31 </> 32 ) : ( 33 <span className="text-sm text-muted-foreground">A link shortening and tracking service</span> 34 )} 35 <ModeToggle /> 36 </div> 37 </div> 38 </header> 39 40 <main className="flex-1 flex flex-col"> 41 <div className="container max-w-6xl mx-auto px-4 py-8 flex-1 flex flex-col"> 42 <div className="space-y-8 flex-1 flex flex-col justify-center"> 43 {user ? ( 44 <> 45 <LinkForm onSuccess={handleLinkCreated} /> 46 <LinkList refresh={refreshCounter} /> 47 </> 48 ) : ( 49 <AuthForms /> 50 )} 51 </div> 52 </div> 53 </main> 54 </div> 55 ) 56} 57 58function App() { 59 return ( 60 <ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme"> 61 <AuthProvider> 62 <AppContent /> 63 <Toaster /> 64 </AuthProvider> 65 </ThemeProvider> 66 ) 67} 68 69export default App