documentation
This commit is contained in:
parent
42a2f89ae3
commit
53b1b9273d
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
8
.idea/Hosting.iml
generated
Normal file
8
.idea/Hosting.iml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/Hosting.iml" filepath="$PROJECT_DIR$/.idea/Hosting.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
20
.idea/php.xml
generated
Normal file
20
.idea/php.xml
generated
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MessDetectorOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCSFixerOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||||
|
<option name="highlightLevel" value="WARNING" />
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PhpProjectSharedConfiguration" php_language_level="8.4" />
|
||||||
|
<component name="PhpStanOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PsalmOptionsConfiguration">
|
||||||
|
<option name="transferred" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
9
docs/docker-compose.yml
Normal file
9
docs/docker-compose.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
services:
|
||||||
|
mkdocs:
|
||||||
|
image: squidfunk/mkdocs-material
|
||||||
|
container_name: mkdocs
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
volumes:
|
||||||
|
- .:/docs
|
||||||
8
docs/docs/index.md
Normal file
8
docs/docs/index.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Welcome to My SaaS Docs
|
||||||
|
|
||||||
|
This is the homepage for your documentation.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Clean design
|
||||||
|
- Fast loading
|
||||||
|
- Easy to write in Markdown
|
||||||
107
docs/docs/stack.md
Normal file
107
docs/docs/stack.md
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
# 🔧 Tech Stack Overview
|
||||||
|
|
||||||
|
This document outlines the technologies used in this SaaS project, categorized by their roles in the system architecture.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Planning & Documentation
|
||||||
|
|
||||||
|
- **MkDocs + Material**: For internal documentation
|
||||||
|
- **Miro / Excalidraw** *(optional)*: For architecture diagrams
|
||||||
|
- **Notion / Obsidian** *(optional)*: For research and planning notes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Backend
|
||||||
|
|
||||||
|
- **Language/Framework**: Laravel (PHP)
|
||||||
|
- **API Style**: RESTful
|
||||||
|
- **Auth**: Laravel Sanctum or Laravel Passport
|
||||||
|
- **Job Queues**: Laravel Queues with Redis
|
||||||
|
- **Database**: MySQL
|
||||||
|
- **Storage**: Amazon S3 for file uploads
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎨 Frontend
|
||||||
|
|
||||||
|
- **Framework**: Angular
|
||||||
|
- **Routing**: Angular Router
|
||||||
|
- **State Management**: NgRx (optional)
|
||||||
|
- **Styling**: Tailwind CSS or Angular Material
|
||||||
|
- **Forms**: Angular Reactive Forms
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Authentication & Authorization
|
||||||
|
|
||||||
|
- **User Auth**: Email/password, with support for OAuth (Google, GitHub)
|
||||||
|
- **Session Handling**: JWT or Laravel session-based
|
||||||
|
- **RBAC**: Role-based access control system
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💳 Billing & Payments
|
||||||
|
|
||||||
|
- **Provider**: Stripe
|
||||||
|
- **Features**: Subscriptions, Trials, Webhooks
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧪 Testing
|
||||||
|
|
||||||
|
- **Unit Tests**: PHPUnit (Laravel), Jasmine/Karma (Angular)
|
||||||
|
- **E2E Testing**: Playwright
|
||||||
|
- **Linting/Formatting**: ESLint, Prettier, PHP CS Fixer
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏭 DevOps & Infrastructure
|
||||||
|
|
||||||
|
- **Containerization**: Docker (dev) + LXC (production under Proxmox)
|
||||||
|
- **Proxmox Server**: Dell R630 with LXC containers for isolation
|
||||||
|
- **CI/CD**: Gitea Actions
|
||||||
|
- **Monitoring/Logs**: Sentry, Logtail, or ELK stack
|
||||||
|
- **Email**: Postmark or Mailgun
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌐 Hosting / Deployment
|
||||||
|
|
||||||
|
- **Frontend**: Nginx serving Angular build in LXC
|
||||||
|
- **Backend**: Laravel in LXC container
|
||||||
|
- **Database**: MySQL (in LXC or Proxmox-hosted VM)
|
||||||
|
- **DNS / SSL**: Let's Encrypt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔒 Security Practices
|
||||||
|
|
||||||
|
- HTTPS enforced
|
||||||
|
- Rate limiting on APIs
|
||||||
|
- Input validation & sanitization
|
||||||
|
- Content Security Policy (CSP)
|
||||||
|
- Regular dependency auditing
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Repo Structure
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── backend/ # Laravel app
|
||||||
|
├── frontend/ # Angular app
|
||||||
|
├── docs/ # MkDocs documentation
|
||||||
|
│ ├─── mkdocs.yml
|
||||||
|
│ ├─── docker-compose.yml
|
||||||
|
│ └──── docs/
|
||||||
|
│ ├─── index.md
|
||||||
|
│ └─── stack.md
|
||||||
|
└── mkdocs.yml
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 Notes
|
||||||
|
|
||||||
|
- Proxmox LXC containers are ideal for resource efficiency and isolation.
|
||||||
|
- You can snapshot and backup containers easily via Proxmox UI or CLI.
|
||||||
|
- Ensure containers have proper firewall and AppArmor profiles.
|
||||||
15
docs/mkdocs.yml
Normal file
15
docs/mkdocs.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
site_name: My SaaS Docs
|
||||||
|
repo_url: https://gitea.vidoks.local/sortifal/Hosting
|
||||||
|
theme:
|
||||||
|
name: material
|
||||||
|
palette:
|
||||||
|
- scheme: default
|
||||||
|
toggle:
|
||||||
|
icon: material/brightness-7
|
||||||
|
name: Switch to dark mode
|
||||||
|
|
||||||
|
# Palette toggle for dark mode
|
||||||
|
- scheme: slate
|
||||||
|
toggle:
|
||||||
|
icon: material/brightness-4
|
||||||
|
name: Switch to light mode
|
||||||
@ -107,5 +107,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"cli": {
|
||||||
|
"analytics": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
frontend/package-lock.json
generated
1
frontend/package-lock.json
generated
@ -12632,7 +12632,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
|
||||||
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
|
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@alloc/quick-lru": "^5.2.0",
|
"@alloc/quick-lru": "^5.2.0",
|
||||||
"arg": "^5.0.2",
|
"arg": "^5.0.2",
|
||||||
|
|||||||
BIN
frontend/public/example_dashboard.png
Normal file
BIN
frontend/public/example_dashboard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 890 KiB |
@ -1,10 +1,11 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { RouterLink } from '@angular/router';
|
import { RouterLink } from '@angular/router';
|
||||||
|
import {NgOptimizedImage} from "@angular/common";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-hero',
|
selector: 'app-hero',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [RouterLink],
|
imports: [RouterLink, NgOptimizedImage],
|
||||||
template: `
|
template: `
|
||||||
<section class="grid gap-10 py-24 md:grid-cols-2">
|
<section class="grid gap-10 py-24 md:grid-cols-2">
|
||||||
<div class="place-self-center text-center md:text-left">
|
<div class="place-self-center text-center md:text-left">
|
||||||
@ -26,9 +27,9 @@ import { RouterLink } from '@angular/router';
|
|||||||
<figure
|
<figure
|
||||||
class="relative aspect-video w-full overflow-hidden rounded-xl shadow-lg">
|
class="relative aspect-video w-full overflow-hidden rounded-xl shadow-lg">
|
||||||
<img
|
<img
|
||||||
src="assets/demo-dashboard.png"
|
ngSrc="example_dashboard.png"
|
||||||
alt="Dashboard preview"
|
alt="Dashboard preview"
|
||||||
class="absolute inset-0 h-full w-full object-cover" />
|
class="absolute inset-0 h-full w-full object-cover" height="1024" width="1024"/>
|
||||||
</figure>
|
</figure>
|
||||||
</section>
|
</section>
|
||||||
`,
|
`,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user