diff --git a/src/db/repo/user.repo.ts b/src/db/repo/user.repo.ts
index c23d853fb3a28c3fcaff9507f9f37cdfa264cfe2..ad04965fda132db122b44bfdfd99157b83b05249 100644
--- a/src/db/repo/user.repo.ts
+++ b/src/db/repo/user.repo.ts
@@ -4,6 +4,7 @@ import userTable, {
   userSchemas,
   type UserInput,
   type UserModel,
+  type UserUpdate,
 } from '../schema/user.model'
 import { z } from 'zod'
 import { eq } from 'drizzle-orm'
@@ -57,4 +58,15 @@ export class UserRepo {
         .parse(await tx.insert(userTable).values(users).returning())
     })
   }
+
+  async update(user: UserUpdate): Promise<UserModel>{
+    const [ret] = await db
+      .update(userTable)
+      .set(user)
+      .where(eq(userTable.id, user.id))
+      .returning()
+
+      return userSchemas.userModelSchema.parse(ret)
+  }
+
 }
diff --git a/src/db/schema/user.model.ts b/src/db/schema/user.model.ts
index c161ebc0bf68ca87961cc7d89121ad0c9418a6f6..92785537b631db527d67518f9b52d846a26601f1 100644
--- a/src/db/schema/user.model.ts
+++ b/src/db/schema/user.model.ts
@@ -14,13 +14,18 @@ const userModelSchema = createSelectSchema(userTable)
 const userDtoSchema = createSelectSchema(userTable).omit({
   password: true,
 })
+const userUpdateSchema = createSelectSchema(userTable)
+  .partial()
+  .required({ id: true })
 
 export type UserInput = z.infer<typeof userInputSchema>
+export type UserUpdate = z.infer<typeof userUpdateSchema>
 export type UserModel = z.infer<typeof userModelSchema>
 export type UserDto = z.infer<typeof userDtoSchema>
 
 export const userSchemas = {
   userInputSchema,
+  userUpdateSchema,
   userModelSchema,
   userDtoSchema,
 }
diff --git a/src/index.ts b/src/index.ts
index fd1950d5f581c1e341d3cc7d9908f0e4aab82b0e..d4752ea0edad4d6f3fed7b816a93e10ba706f650 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,7 +1,7 @@
 import { Hono } from 'hono'
 import { logger } from 'hono/logger'
 
-import { userRouter } from './routes/user.routes'
+import { signUpRouter, userRouter } from './routes/user.routes'
 import { authRouter } from './routes/auth.route'
 import { jwt } from 'hono/jwt'
 import env from './env'
@@ -46,7 +46,8 @@ app.use(
 
 app.get('/', (c) => c.json({ message: 'sv running on /api' }))
 
-app.route('auth', authRouter)
+app.route('/auth', authRouter)
+app.route('/signup', signUpRouter)
 
 app
   .basePath('/api')
diff --git a/src/routes/user.routes.ts b/src/routes/user.routes.ts
index fe9bdc8df8b46822ea48aa828b300cfb9ed78de5..d4f311f4f106f4d8b3695f889b585769fd6d9d6a 100644
--- a/src/routes/user.routes.ts
+++ b/src/routes/user.routes.ts
@@ -4,21 +4,29 @@ import { Container } from 'typedi'
 import { z } from 'zod'
 import { zValidator } from '@hono/zod-validator'
 import { honoWithJwt } from '..'
+import { Hono } from 'hono'
+import { createApexError, HttpStatus } from '@/services/error.service'
 
 const service = Container.get(UserService)
 
-export const userRouter = honoWithJwt()
-  .get('/:username', async (c) => {
-    try {
-      const username = c.req.param('username')
-      const user = await service.findByUsername(username)
-      const ret = userSchemas.userDtoSchema.parse(user)
+export const signUpRouter = new Hono()
+  .post('/',
+    zValidator('json', userSchemas.userInputSchema),
+    async (c) => {
+      try {
+        const input = await c.req.valid('json')
 
-      return c.json({ user: ret })
-    } catch {
-      return c.notFound()
-    }
+        const user = userSchemas.userDtoSchema.parse(
+          await service.create(input)
+        )
+
+        return c.json({ user })
+      } catch (e) {
+        return c.text('could not create')
+      }
   })
+
+export const userRouter = honoWithJwt()
   .get('/users', async (c) => {
     const p = c.get('jwtPayload')
 
@@ -29,21 +37,41 @@ export const userRouter = honoWithJwt()
     const ret = z.array(userSchemas.userDtoSchema).parse(users)
 
     return c.json({ users: ret })
-  })
-  .post(
-    '/create',
-    zValidator('json', userSchemas.userInputSchema),
+  })  
+  .get('/:username', async (c) => {
+    try {
+      const username = c.req.param('username')
+      const user = await service.findByUsername(username)
+      const ret = userSchemas.userDtoSchema.parse(user)
+
+      return c.json({ user: ret })
+    } catch {
+      return c.notFound()
+    }
+  })  
+  .post('/update',
+    zValidator('json', userSchemas.userUpdateSchema),
     async (c) => {
       try {
         const input = await c.req.valid('json')
 
         const user = userSchemas.userDtoSchema.parse(
-          await service.create(input)
+          await service.update(input)
         )
-
-        return c.json({ user })
+        
+        return c.json({user})
       } catch (e) {
-        return c.text('could not create')
+
+        return c.json(
+          createApexError({
+            status: 'error',
+            message: 'could not update user',
+            code: HttpStatus.BAD_REQUEST,
+            path: c.req.routePath,
+            suggestion: 'check the input and try again',
+          }),
+          HttpStatus.BAD_REQUEST
+        )
+
       }
-    }
-  )
+  })
diff --git a/src/services/user.service.ts b/src/services/user.service.ts
index 71e8eda421dc230bcba9697085379af718788f46..6c3597e44fe35b3a9959faa59b52ad1087e3b7d7 100644
--- a/src/services/user.service.ts
+++ b/src/services/user.service.ts
@@ -5,6 +5,7 @@ import {
   userSchemas,
   type UserInput,
   type UserModel,
+  type UserUpdate,
 } from '@/db/schema/user.model'
 import { Inject, Service } from 'typedi'
 import { z } from 'zod'
@@ -51,4 +52,10 @@ export class UserService {
 
     return this.repo.uploadUsers(users)
   }
+
+  async update(user: UserUpdate): Promise<UserModel> {
+    if(user.password)
+      user.password = hashPassword(user.password)
+    return this.repo.update(user)
+  }
 }