Initialize Aidoit v0.1 monorepo
CI / frontend (push) Canceled after 0s
CI / api (push) Canceled after 0s

This commit is contained in:
Pavel Kerndl
2026-07-27 18:27:37 +02:00
commit c0b013f067
65 changed files with 1323 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"noEmit": true,
"skipLibCheck": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"isolatedModules": true
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"extends": "./base.json",
"compilerOptions": {
"jsx": "preserve",
"incremental": true,
"plugins": [{ "name": "next" }]
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"name": "@aidoit/config",
"version": "0.1.0",
"private": true,
"files": [
"*.json"
]
}
+6
View File
@@ -0,0 +1,6 @@
{
"extends": "./base.json",
"compilerOptions": {
"jsx": "react-jsx"
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"name": "@aidoit/contracts",
"version": "0.1.0",
"private": true,
"type": "module",
"exports": {
".": "./src/index.ts"
},
"scripts": {
"build": "tsc --noEmit",
"lint": "tsc --noEmit",
"typecheck": "tsc --noEmit",
"test": "echo \"No contract tests yet\""
},
"devDependencies": {
"@aidoit/config": "workspace:*",
"typescript": "^5.8.0"
}
}
+15
View File
@@ -0,0 +1,15 @@
export type ProductType = "web" | "desktop" | "msp";
export interface Project {
id: number;
name: string;
description: string;
product: ProductType;
created_at: string;
}
export interface CreateProjectRequest {
name: string;
description?: string;
product?: ProductType;
}
+4
View File
@@ -0,0 +1,4 @@
{
"extends": "@aidoit/config/base.json",
"include": ["src"]
}
+22
View File
@@ -0,0 +1,22 @@
{
"name": "@aidoit/sdk",
"version": "0.1.0",
"private": true,
"type": "module",
"exports": {
".": "./src/index.ts"
},
"scripts": {
"build": "tsc --noEmit",
"lint": "tsc --noEmit",
"typecheck": "tsc --noEmit",
"test": "echo \"No SDK tests yet\""
},
"dependencies": {
"@aidoit/contracts": "workspace:*"
},
"devDependencies": {
"@aidoit/config": "workspace:*",
"typescript": "^5.8.0"
}
}
+36
View File
@@ -0,0 +1,36 @@
import type { CreateProjectRequest, Project } from "@aidoit/contracts";
export class AidoitClient {
public constructor(
private readonly baseUrl: string,
private readonly token?: string,
) {}
private async request<T>(path: string, init?: RequestInit): Promise<T> {
const response = await fetch(`${this.baseUrl}${path}`, {
...init,
headers: {
"Content-Type": "application/json",
...(this.token ? { Authorization: `Bearer ${this.token}` } : {}),
...init?.headers,
},
});
if (!response.ok) {
throw new Error(`Aidoit API request failed: ${response.status}`);
}
return response.json() as Promise<T>;
}
public listProjects(): Promise<Project[]> {
return this.request<Project[]>("/api/v1/projects");
}
public createProject(payload: CreateProjectRequest): Promise<Project> {
return this.request<Project>("/api/v1/projects", {
method: "POST",
body: JSON.stringify(payload),
});
}
}
+4
View File
@@ -0,0 +1,4 @@
{
"extends": "@aidoit/config/base.json",
"include": ["src"]
}
+24
View File
@@ -0,0 +1,24 @@
{
"name": "@aidoit/ui",
"version": "0.1.0",
"private": true,
"type": "module",
"exports": {
".": "./src/index.ts",
"./styles.css": "./src/styles.css"
},
"scripts": {
"build": "tsc --noEmit",
"lint": "tsc --noEmit",
"typecheck": "tsc --noEmit",
"test": "echo \"No UI tests yet\""
},
"peerDependencies": {
"react": "^19.0.0"
},
"devDependencies": {
"@aidoit/config": "workspace:*",
"@types/react": "^19.0.0",
"typescript": "^5.8.0"
}
}
+1
View File
@@ -0,0 +1 @@
export { StatCard } from "./stat-card";
+15
View File
@@ -0,0 +1,15 @@
type StatCardProps = {
label: string;
value: string;
detail: string;
};
export function StatCard({ label, value, detail }: StatCardProps) {
return (
<article className="aidoit-stat-card">
<span>{label}</span>
<strong>{value}</strong>
<p>{detail}</p>
</article>
);
}
+52
View File
@@ -0,0 +1,52 @@
:root {
color-scheme: dark;
--background: #071019;
--surface: #0d1824;
--surface-soft: #101e2c;
--border: rgba(255, 255, 255, 0.08);
--text: #eef6ff;
--muted: #8ca0b5;
--accent: #57c7ff;
}
* {
box-sizing: border-box;
}
html {
background: var(--background);
}
body {
margin: 0;
background:
radial-gradient(circle at 80% 0%, rgba(45, 139, 196, 0.12), transparent 28%),
var(--background);
color: var(--text);
font-family:
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
sans-serif;
}
.aidoit-stat-card {
padding: 20px;
border: 1px solid var(--border);
background: linear-gradient(180deg, rgba(16, 30, 44, 0.96), rgba(10, 22, 32, 0.96));
border-radius: 18px;
}
.aidoit-stat-card span,
.aidoit-stat-card p {
color: var(--muted);
}
.aidoit-stat-card strong {
display: block;
font-size: 34px;
margin: 18px 0 5px;
}
.aidoit-stat-card p {
margin: 0;
font-size: 12px;
}
+4
View File
@@ -0,0 +1,4 @@
{
"extends": "@aidoit/config/react-library.json",
"include": ["src"]
}