Mobile support to come.
Feb 7
wip - wire up our user dto creation
baepaul•11:41 PM
making signup form also work without js, minimal as is
baepaul•10:47 PM
refactoring validate user -> hasUser and wiring up signup form
baepaul•10:33 PM
updating sign up to use signin with otp instead
baepaul•5:25 PM
migration to disable creating user on auth user
baepaul•4:47 PM
Feb 6
for the subways
baepaul•11:10 PM
deleted unused import
mikkel•8:28 PM
chained user router
mikkel•8:26 PM
refactoring to head -> /user/{username} for username existence checks
baepaul•8:23 PM
a lot of footguns eh
baepaul•7:49 PM
updated public url to include www
mikkel•8:00 PM
wired up commit service in backend
mikkel•7:18 PM
added commit repo and service
mikkel•7:14 PM
created commits table
mikkel•7:05 PM
Feb 5
removed unnecessary envs
mikkel•9:55 PM
replaced create_user api with validate_name api
mikkel•9:54 PM
created temporary signup page
mikkel•8:37 PM
fixed sending request to wrong url
mikkel•7:51 PM
Feb 3
added reserved user names to avoid
mikkel•9:53 PM
implemented create user endpoint
mikkel•6:24 AM
created supabase client
mikkel•5:18 AM
updated server url in cli to gitdot.io
mikkel•4:54 AM
enabled git ops directly via gitdot.io
mikkel•4:52 AM
making commit.author work with legacy commit stats apis
baepaul•12:21 AM
updated commits api to return gitdot user info if exist
mikkel•12:01 AM
Feb 2
enabling dark mode based on system preference for blog & landing page only
baepaul•10:41 PM
sorting entries
baepaul•10:15 PM
explaining my sins
baepaul•9:33 PM
doing something risky and ill-advised :)
baepaul•9:13 PM
updated preview to only return blobs
mikkel•8:14 PM
baepaul•Feb 06, 2026 7:49:25 PM
a lot of footguns eh
2 files changed
1import { redirect } from "next/navigation";2import { getCurrentUser } from "@/lib/dal";3import AuthorizeDeviceForm from "../../ui/authorize-device-form";45export default async function Page() {6 const user = await getCurrentUser();7 if (!user) {8 redirect("/login?redirect=/oauth/device");9 }
1import { redirect } from "next/navigation";2import { getCurrentUser } from "@/lib/dal";3import AuthorizeDeviceForm from "../../ui/authorize-device-form";45export default function Page() {6 return (7 <div className="max-w-3xl mx-auto flex gap-4 items-center justify-center h-screen">8 <AuthorizeDeviceForm />9 </div>
76 // checks session & refreshes if necessary, setting both cookies & supabaseResponse77 const { data } = await supabase.auth.getClaims();78 const user = data?.claims;7980 const isAuthPath = ["/login", "/signup"].includes(request.nextUrl.pathname);81 if (user && isAuthPath) {82 return NextResponse.redirect(new URL("/home", request.nextUrl));83 }8485 // return the supabaseResponse object as-is, this is required to ensure that cookies are in sync between the server and client.86 return supabaseResponse;87}
76 // checks session & refreshes if necessary, setting both cookies & supabaseResponse77 const { data } = await supabase.auth.getClaims();78 const user = data?.claims;7980 const pathname = request.nextUrl.pathname;81 if (user && (pathname === "/login" || pathname === "/signup")) {82 return NextResponse.redirect(new URL("/home", request.nextUrl));83 } else if (!user && pathname === "/oauth/device") {84 return NextResponse.redirect(new URL("/login?redirect=/oauth/device", request.nextUrl));85 }8687 // return the supabaseResponse object as-is, this is required to ensure that cookies are in sync between the server and client.