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
mikkel•Feb 03, 2026 9:53:22 PM
added reserved user names to avoid
5 files changed
66 let status_code = match e {67 UserError::NotFound(_) => StatusCode::NOT_FOUND,68 UserError::InvalidUserName(_) => StatusCode::BAD_REQUEST,69 UserError::NameTaken(_) => StatusCode::CONFLICT,70 UserError::EmailTaken(_) => StatusCode::CONFLICT,..71 UserError::SupabaseError(_) => StatusCode::INTERNAL_SERVER_ERROR,72 UserError::DatabaseError(_) => StatusCode::INTERNAL_SERVER_ERROR,73 };74 let response = AppResponse::new(
66 let status_code = match e {67 UserError::NotFound(_) => StatusCode::NOT_FOUND,68 UserError::InvalidUserName(_) => StatusCode::BAD_REQUEST,69 UserError::NameTaken(_) => StatusCode::CONFLICT,70 UserError::EmailTaken(_) => StatusCode::CONFLICT,71 UserError::ReservedName(_) => StatusCode::CONFLICT,72 UserError::SupabaseError(_) => StatusCode::INTERNAL_SERVER_ERROR,73 UserError::DatabaseError(_) => StatusCode::INTERNAL_SERVER_ERROR,74 };75 let response = AppResponse::new(
12 NameTaken(String),1314 #[error("Email already taken: {0}")]15 EmailTaken(String),16....17 #[error("Database error: {0}")]18 DatabaseError(#[from] sqlx::Error),1920 #[error("Supabase error: {0}")]
12 NameTaken(String),1314 #[error("Email already taken: {0}")]15 EmailTaken(String),1617 #[error("Reserved name: {0}")]18 ReservedName(String),1920 #[error("Database error: {0}")]21 DatabaseError(#[from] sqlx::Error),22
7};8use crate::error::UserError;9use crate::repository::{10 RepositoryRepository, RepositoryRepositoryImpl, UserRepository, UserRepositoryImpl,11};..1213#[async_trait]14pub trait UserService: Send + Sync + 'static {15 async fn create_user(&self, request: CreateUserRequest) -> Result<UserResponse, UserError>;
7};8use crate::error::UserError;9use crate::repository::{10 RepositoryRepository, RepositoryRepositoryImpl, UserRepository, UserRepositoryImpl,11};12use crate::util::auth::is_reserved_name;1314#[async_trait]15pub trait UserService: Send + Sync + 'static {16 async fn create_user(&self, request: CreateUserRequest) -> Result<UserResponse, UserError>;
62{63 async fn create_user(&self, request: CreateUserRequest) -> Result<UserResponse, UserError> {64 let name = request.name.to_string();6566 if self.user_repo.is_name_taken(&name).await? {......67 return Err(UserError::NameTaken(name));68 }69 if self.user_repo.is_email_taken(&request.email).await? {70 return Err(UserError::EmailTaken(request.email.clone()));
62 S: SupabaseClient,63{64 async fn create_user(&self, request: CreateUserRequest) -> Result<UserResponse, UserError> {65 let name = request.name.to_string();6667 if is_reserved_name(&name) {68 return Err(UserError::ReservedName(name));69 }7071 if self.user_repo.is_name_taken(&name).await? {72 return Err(UserError::NameTaken(name));73 }
loading...