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 { Button } from './components/ui/button' 3import { LinkForm } from './components/LinkForm' 4import { LinkList } from './components/LinkList' 5import { AuthForms } from './components/AuthForms' 6import { AuthProvider, useAuth } from './context/AuthContext' 7import { useState } from 'react' 8import { Toaster } from './components/ui/toaster' 9 10function AppContent() { 11 const { user, logout } = useAuth() 12 const [refreshCounter, setRefreshCounter] = useState(0) 13 14 const handleLinkCreated = () => { 15 // Increment refresh counter to trigger list refresh 16 setRefreshCounter(prev => prev + 1) 17 } 18 19 return ( 20 <div className="min-h-screen flex flex-col"> 21 <div className="container max-w-6xl mx-auto py-8 flex-1 flex flex-col"> 22 <div className="space-y-8 flex-1 flex flex-col justify-center"> 23 <div className="flex items-center justify-between"> 24 <h1 className="text-3xl font-bold">SimpleLink</h1> 25 {user ? ( 26 <div className="flex items-center gap-4"> 27 <p className="text-sm text-muted-foreground">Welcome, {user.email}</p> 28 <Button variant="outline" onClick={logout}> 29 Logout 30 </Button> 31 </div> 32 ) : ( 33 <div className="flex items-center gap-4"> 34 <p className="text-sm text-muted-foreground">A link shortening and tracking service</p> 35 </div> 36 )} 37 </div> 38 39 {user ? ( 40 <> 41 <LinkForm onSuccess={handleLinkCreated} /> 42 <LinkList refresh={refreshCounter} /> 43 </> 44 ) : ( 45 <AuthForms /> 46 )} 47 </div> 48 </div> 49 </div> 50 ) 51} 52 53function App() { 54 return ( 55 <ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme"> 56 <AuthProvider> 57 <AppContent /> 58 <Toaster /> 59 </AuthProvider> 60 </ThemeProvider> 61 ) 62} 63 64export default App