Merge branch 'development' into Database-Schema-&-Models

Resolved conflicts by keeping Database-Schema-&-Models version which contains:
- Complete Phase 7 documentation polish (ELI5 style)
- GitHub Actions CI/CD workflows (Docker + Pages)
- GHCR migration (replacing Docker Hub)
- All backend and frontend improvements
This commit is contained in:
Wikid82
2025-11-18 13:20:20 -05:00
33 changed files with 2260 additions and 27 deletions
+14
View File
@@ -0,0 +1,14 @@
# Frontend (Vite + React)
## Development
```bash
cd frontend
npm install
npm run dev
```
## Production build
```bash
cd frontend
npm run build
```
+18
View File
@@ -0,0 +1,18 @@
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import reactRefresh from 'eslint-plugin-react-refresh';
import reactHooks from 'eslint-plugin-react-hooks';
export default tseslint.config(
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ['**/*.{ts,tsx}'],
plugins: { 'react-refresh': reactRefresh, 'react-hooks': reactHooks },
rules: {
'react-refresh/only-export-components': 'warn',
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn'
}
}
);
+7
View File
@@ -0,0 +1,7 @@
import axios from 'axios';
const client = axios.create({
baseURL: '/api/v1'
});
export default client;
+32
View File
@@ -0,0 +1,32 @@
import { useQuery } from '@tanstack/react-query';
import client from '../api/client';
interface HealthResponse {
status: string;
service: string;
}
const fetchHealth = async (): Promise<HealthResponse> => {
const { data } = await client.get<HealthResponse>('/health');
return data;
};
const HealthStatus = () => {
const { data, isLoading, isError } = useQuery({ queryKey: ['health'], queryFn: fetchHealth });
return (
<section>
<h2>System Status</h2>
{isLoading && <p>Checking health</p>}
{isError && <p className="error">Unable to reach backend</p>}
{data && (
<ul>
<li>Service: {data.service}</li>
<li>Status: {data.status}</li>
</ul>
)}
</section>
);
};
export default HealthStatus;
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
+1
View File
@@ -0,0 +1 @@
{"root":["./src/App.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/api/client.ts","./src/components/Layout.tsx","./src/hooks/useProxyHosts.ts","./src/pages/Dashboard.tsx","./src/pages/HealthStatus.tsx","./src/pages/ProxyHosts.tsx"],"version":"5.9.3"}