Vendor backend and frontend into the monorepo

The submodule collapse was only half applied: .gitmodules was deleted but
backend/ and frontend/ were still recorded as gitlinks, so none of their
files were tracked. Replace the gitlinks with the real trees.

Also untrack .env (it carried placeholder secrets) in favour of a tracked
.env.example, drop the committed __pycache__, and narrow the blanket *.png
ignore that would have swallowed design assets.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Melvin Strobl
2026-08-09 15:14:54 +02:00
co-authored by Claude Opus 5
parent 3cb16958ba
commit 1916f7f778
216 changed files with 20353 additions and 54 deletions
+31
View File
@@ -0,0 +1,31 @@
import { AxiosError } from "axios"
import type { ApiError } from "./client"
function extractErrorMessage(err: ApiError): string {
if (err instanceof AxiosError) {
return err.message
}
const errDetail = (err.body as any)?.detail
if (Array.isArray(errDetail) && errDetail.length > 0) {
return errDetail[0].msg
}
return errDetail || "Something went wrong."
}
export const handleError = function (
this: (msg: string) => void,
err: ApiError,
) {
const errorMessage = extractErrorMessage(err)
this(errorMessage)
}
export const getInitials = (name: string): string => {
return name
.split(" ")
.slice(0, 2)
.map((word) => word[0])
.join("")
.toUpperCase()
}