diff --git a/.commitmsg b/.commitmsg new file mode 100644 index 0000000..fb46960 --- /dev/null +++ b/.commitmsg @@ -0,0 +1 @@ +Initial commit: project specification and README \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..95942e8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +# Build stage +FROM node:20-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci +COPY . . +RUN npm run build + +# Serve stage +FROM nginx:alpine +COPY --from=builder /app/dist /usr/share/nginx/html +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d0eb1f9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,6 @@ +services: + website: + build: . + ports: + - "8080:80" + restart: unless-stopped \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..4926994 --- /dev/null +++ b/index.html @@ -0,0 +1,95 @@ + + + + + + TillTheEnd - Delivering results, not promises + + + +
+ +
+
TillTheEnd
+ +
+ + +
+

TillTheEnd

+

Delivering results, not promises.

+
+ Contact + GitHub +
+

Software Development • Infrastructure • Consulting

+
+ + +
+

Services

+
+
+
💻
+

Software Development

+

Custom solutions tailored to your needs

+
+
+
⚙️
+

Infrastructure

+

Reliable systems architecture

+
+
+
💬
+

Consulting

+

Expert guidance from concept to completion

+
+
+
+ + +
+

About

+
+

+ TillTheEnd is an IT consulting and freelancing service focused on delivering + exceptional results for clients. With expertise in software development, + infrastructure, and strategic consulting, we help businesses achieve their + technology goals. +

+
+
+ + +
+

Contact

+
+
+
+ Email: + contact@tilltheend.de +
+
+ GitHub: + github.com/iRave +
+ +
+
+
+ + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..ff120d6 --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "tilltheend-website", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.2.1", + "autoprefixer": "^10.4.27", + "postcss": "^8.5.6", + "tailwindcss": "^4.2.1", + "vite": "^7.3.1" + }, + "description": "Personal website for IT consulting and freelancing.", + "main": "index.js", + "repository": { + "type": "git", + "url": "gitea@192.168.178.123:Loto/tilltheend-website.git" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..8416a01 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + } +} \ No newline at end of file diff --git a/src/counter.js b/src/counter.js new file mode 100644 index 0000000..881e2d7 --- /dev/null +++ b/src/counter.js @@ -0,0 +1,9 @@ +export function setupCounter(element) { + let counter = 0 + const setCounter = (count) => { + counter = count + element.innerHTML = `count is ${counter}` + } + element.addEventListener('click', () => setCounter(counter + 1)) + setCounter(0) +} diff --git a/src/javascript.svg b/src/javascript.svg new file mode 100644 index 0000000..f9abb2b --- /dev/null +++ b/src/javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main.css b/src/main.css new file mode 100644 index 0000000..c50de9a --- /dev/null +++ b/src/main.css @@ -0,0 +1,20 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + background-color: #fafafa; + color: #111; +} + +body { + margin: 0; + padding: 0; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..2a72333 --- /dev/null +++ b/src/main.js @@ -0,0 +1,4 @@ +import './main.css' + +// TillTheEnd website initialization +console.log('TillTheEnd website loaded') diff --git a/src/style.css b/src/style.css new file mode 100644 index 0000000..8df73e3 --- /dev/null +++ b/src/style.css @@ -0,0 +1,96 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #f7df1eaa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..426aa12 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,16 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + colors: { + orange: '#f97316', + purple: '#a855f7', + } + }, + }, + plugins: [], +} \ No newline at end of file