Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
d2a1d82
chore: add .vercel to .gitignore
Mathieu-bot Aug 24, 2025
0659826
Squashed commit of the following:
Mathieu-bot Aug 24, 2025
6e93428
feat(server): add auth route and auth service
Mathieu-bot Aug 24, 2025
77c922d
feat(server): add category CRUD operations
Mathieu-bot Aug 24, 2025
5a707a3
chore(server): update .gitignore
Mathieu-bot Aug 24, 2025
79efa7f
chore(server): update server dependencies
Mathieu-bot Aug 24, 2025
9cc9c81
feat(server): configure server bootstrap
Mathieu-bot Aug 24, 2025
8bf0da8
docs(server): update OpenAPI spec by removing duplication
Mathieu-bot Aug 24, 2025
35f9c24
Update .gitignore
Mathieu-bot Aug 24, 2025
05a62d0
Merge branch 'dev' into feat/auth
Mathieu-bot Aug 25, 2025
68a5f4b
refactor(server): move auth DB logic to service layer; keep controlle…
Mathieu-bot Aug 25, 2025
178f25e
feat(auth): add email and password strength validation
Mathieu-bot Aug 25, 2025
ea48847
refactor(auth): extract validation logic into middleware
Mathieu-bot Aug 25, 2025
885a8c3
Merge remote-tracking branch 'origin/feat/auth' into feat/auth
Mathieu-bot Aug 25, 2025
99d6e3b
refactor(category): case-insensitive uniqueness + middlewares create/…
Mathieu-bot Aug 25, 2025
d77752b
merge feat/auth into feat/category
Mathieu-bot Aug 26, 2025
ed2e05b
refactor: remove useless import
Mathieu-bot Aug 29, 2025
c5862c9
chore: remove fake middleware and activate helmet
Mathieu-bot Aug 29, 2025
ff40005
chore: import api/config
Mathieu-bot Aug 30, 2025
f5af056
chore: use location hooks for the location
Mathieu-bot Aug 30, 2025
0d756e3
style: Update index.css with slide animation
Mathieu-bot Aug 30, 2025
63d1bb9
chore(server): Update docs
Mathieu-bot Aug 30, 2025
80a1c60
chore(client): regenerate SDK
Mathieu-bot Aug 30, 2025
fc29444
feat: add LogoutButton and use it in the sidebar
Mathieu-bot Aug 30, 2025
874a007
feat(auth): add RequireAuth component for protected routes
Mathieu-bot Aug 30, 2025
a08fae4
feat(auth): add useAuth hooks
Mathieu-bot Aug 30, 2025
a2924da
feat(auth): add auth pages (LoginPage, SignupPage)
Mathieu-bot Aug 30, 2025
a000646
feat(client): add auth components like LoginForm, SignupForm ...
Mathieu-bot Aug 30, 2025
b9f6117
Mathieu-bot Aug 30, 2025
14ceb80
Squashed commit of the following:
Mathieu-bot Aug 30, 2025
f17cf33
Mathieu-bot Aug 30, 2025
65a5a74
Mathieu-bot Aug 30, 2025
98de5f5
refactor: type the location to avoid TS errors and ignore src/api in …
Mathieu-bot Aug 30, 2025
a7932b3
feat(server): seed catégories globales + script prisma:seed + spec ca…
Mathieu-bot Aug 30, 2025
d1e1759
refactor: use PATCH instead of PUT for /profile
Mathieu-bot Aug 30, 2025
1fdea8f
feat: Update prisma/migration
Mathieu-bot Aug 30, 2025
061e729
feat: implemente updateProfile
Mathieu-bot Aug 31, 2025
ce68977
refactor: add panel classe
Mathieu-bot Aug 31, 2025
53f6032
feat: implement post-signup flow with category selection
Mathieu-bot Aug 31, 2025
25135af
Feat/post signup (#29)
Mathieu-bot Aug 31, 2025
4f3681a
fix: fix @typescript-eslint/no-unused-vars
Mathieu-bot Aug 31, 2025
23b292b
Merge remote-tracking branch 'origin/feat/ui/auth' into feat/ui/auth
Mathieu-bot Aug 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion client/eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import tseslint from 'typescript-eslint'
import { globalIgnores } from 'eslint/config'

export default tseslint.config([
globalIgnores(['dist', 'storybook-static']),
globalIgnores(['dist', 'storybook-static', 'src/api']),
{
files: ['**/*.{ts,tsx}'],
extends: [
Expand Down
Binary file added client/public/Monogram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/public/auth-side.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/public/sarah.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 25 additions & 12 deletions client/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ import BackgroundImage from "./components/common/BackgroundImage";
import { CreateIncome } from "./pages/CreateIncome";
import { EditIncome } from "./pages/EditIncome";
import Mascot from "./components/common/Mascot";
import { DashboardHeader } from "./components/common/Header";
import DashboardHeader from "./components/common/Header";
import RequireAuth from "./components/common/RequireAuth";
import LoginPage from "./pages/LoginPage";
import SignupPage from "./pages/SignupPage";
import AuthCallback from "./pages/AuthCallback";
import DashboardLayout from "./components/common/DashboardLayout";
import { Profile } from "./pages/Profile";

function App() {
/*
TODO: check auth then redirect to /login when not authenticated
TODO: use different layout for auth page and dashboard page
*/
const location = useLocation();
return (
<ToastProvider
Expand All @@ -25,20 +26,32 @@ function App() {
>
<div className="App min-h-screen relative overflow-x-hidden">
{location.pathname.includes("/login") ||
location.pathname.includes("/register") ? null : (
location.pathname.includes("/signup") ? null : (
<>
<BackgroundImage />
<DashboardHeader />
<Sidebar />
</>
)}
<Mascot className="z-50" />
{location.pathname.includes("/login") || location.pathname.includes("/signup") ? null : (
<Mascot className="z-50" />
)}
<Routes>
<Route path="/" element={<Dashboard />} />
<Route path="/incomes" element={<Incomes />} />
<Route path="/incomes/new" element={<CreateIncome />} />
<Route path="/incomes/:id/edit" element={<EditIncome />} />
<Route path="/profile" element={<Profile />} />
{/* Public routes */}
<Route path="/login" element={<LoginPage />} />
<Route path="/signup" element={<SignupPage />} />
<Route path="/auth/callback" element={<AuthCallback />} />

{/* Protected routes */}
<Route element={<RequireAuth />}>
<Route element={<DashboardLayout />}>
<Route path="/" element={<Dashboard />} />
<Route path="/incomes" element={<Incomes />} />
<Route path="/incomes/new" element={<CreateIncome />} />
<Route path="/incomes/:id/edit" element={<EditIncome />} />
<Route path="/profile" element={<Profile />} />
</Route>
</Route>
</Routes>
</div>
</ToastProvider>
Expand Down
2 changes: 1 addition & 1 deletion client/src/api/core/ApiError.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ export class ApiError extends Error {
this.body = response.body;
this.request = request;
}
}
}
2 changes: 1 addition & 1 deletion client/src/api/core/ApiRequestOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ export type ApiRequestOptions = {
readonly mediaType?: string;
readonly responseHeader?: string;
readonly errors?: Record<number, string>;
};
};
2 changes: 1 addition & 1 deletion client/src/api/core/ApiResult.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ export type ApiResult = {
readonly status: number;
readonly statusText: string;
readonly body: any;
};
};
2 changes: 1 addition & 1 deletion client/src/api/core/CancelablePromise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,4 @@ export class CancelablePromise<T> implements Promise<T> {
public get isCancelled(): boolean {
return this.#isCancelled;
}
}
}
Loading