Loads of boiler plating
Some checks failed
Build, Push, and Deploy to Nomad / docker-nomad (push) Failing after 4m31s

This commit is contained in:
Henrik Jess
2024-12-10 16:40:17 +01:00
parent 6b96d9f6de
commit 454de7aae5
9 changed files with 221 additions and 73 deletions

40
app.py
View File

@@ -1,16 +1,36 @@
import uvicorn from fastapi import FastAPI, Request
from fastapi import FastAPI from fastapi.staticfiles import StaticFiles
from dotenv import load_dotenv from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import json
import os import os
load_dotenv() app = FastAPI()
app = FastAPI(title=os.getenv("APP_NAME", "Default App")) # Mount static files
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/") # Templates directory
def read_root(): templates = Jinja2Templates(directory="templates")
return {"debug": os.getenv("DEBUG", "false")}
# Load JSON data
with open("mock_data.json") as file:
data = json.load(file)
if __name__ == "__main__": # Index route
uvicorn.run("app:app", host="0.0.0.0", port=9210, reload=True) @app.get("/", response_class=HTMLResponse)
async def get_index(request: Request):
return templates.TemplateResponse("index.html", {"request": request, "data": data})
# Category route
@app.get("/category/{category_name}", response_class=HTMLResponse)
async def get_category(request: Request, category_name: str):
category_file = f"data/{category_name}/index.html"
if os.path.exists(category_file):
with open(category_file) as file:
category_content = file.read()
return templates.TemplateResponse(
"category.html",
{"request": request, "category_name": category_name, "content": category_content}
)
return HTMLResponse("Kategori ikke fundet", status_code=404)

1
data/bolig/index.html Normal file
View File

@@ -0,0 +1 @@
<P> Lidt om Bolig </P>

1
data/job/index.html Normal file
View File

@@ -0,0 +1 @@
<P> Lidt om job </P>

1
data/skat/index.html Normal file
View File

@@ -0,0 +1 @@
<P> Lidt om skat </P>

1
data/skole/index.html Normal file
View File

@@ -0,0 +1 @@
<P> Lidt om skole </P>

View File

@@ -1,12 +1,8 @@
<!DOCTYPE HTML> <!DOCTYPE HTML>
<!--
Editorial by HTML5 UP
html5up.net | @ajlkn
Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html> <html>
<head> <head>
<title>Generic - Editorial by HTML5 UP</title> <title>PortugalFAQ - Henriks og Erikas lille side</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="assets/css/main.css" /> <link rel="stylesheet" href="assets/css/main.css" />
@@ -22,46 +18,26 @@
<!-- Header --> <!-- Header -->
<header id="header"> <header id="header">
<a href="index.html" class="logo"><strong>Editorial</strong> by HTML5 UP</a> <a href="index.html" class="logo"><strong>Forside</strong> af Henrik</a>
<ul class="icons"> <ul class="icons">
<li><a href="#" class="icon brands fa-twitter"><span class="label">Twitter</span></a></li>
<li><a href="#" class="icon brands fa-facebook-f"><span class="label">Facebook</span></a></li> <li><a href="#" class="icon brands fa-facebook-f"><span class="label">Facebook</span></a></li>
<li><a href="#" class="icon brands fa-snapchat-ghost"><span class="label">Snapchat</span></a></li>
<li><a href="#" class="icon brands fa-instagram"><span class="label">Instagram</span></a></li>
<li><a href="#" class="icon brands fa-medium-m"><span class="label">Medium</span></a></li>
</ul> </ul>
</header> </header>
<!-- Content --> <!-- Content -->
<section> <section>
<header class="main"> <header class="main">
<h1>Generic</h1> <h1>Min Drøm om Portugal</h1><h2>En Frisk Start for Henrik og Erika</h2>
</header> </header>
<span class="image main"><img src="images/pic11.jpg" alt="" /></span> <span class="image main"><img src="images/pic11.jpg" alt="" /></span>
<p>Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel sed vehicula.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fersapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique lorem ipsum dolor.</p>
<hr class="major" /> <hr class="major" />
<p> Portugal er blevet symbolet på den nye begyndelse, jeg drømmer om en mulighed for at skabe et liv med mere ro, plads og mening. Som Henrik, far til min 16-årige datter Erika, har tanken om at flytte fra Danmark til Portugal vokset sig stærkere de seneste år. Det er ikke bare et ønske om sol og varme, men om en hverdag, hvor livskvalitet betyder mere end stress og travlhed.</p>
<h2>Interdum sed dapibus</h2> <p> Drømmen er konkret: en hverdag med tid til både arbejde og familieliv, omgivet af Portugals smukke landskaber og venlige kultur. Med Lissabon som udgangspunkt forestiller jeg mig et liv, hvor jeg arbejder struktureret, pendler til Danmark i de lige uger og tilbringer de øvrige uger i vores nye hjem. Det handler ikke om at efterlade alt bag sig, men om at finde en bedre balance mellem mine forpligtelser i Danmark og en ny tilværelse, hvor solen skinner lidt længere.</p>
<p>Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit.</p> <p> For Erika er det også en chance for at opleve en ny kultur, møde nye mennesker og måske starte på en ungdomsuddannelse i Portugal. Vi ved begge, at det ikke bliver uden udfordringer med praktiske overvejelser som bolig, skat, pendling og skolegang men fordelene vejer tungere. Leveomkostningerne er lavere, menneskerne er imødekommende, og tempoet giver plads til at trække vejret.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel sed vehicula. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fersapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique lorem ipsum dolor.</p> <p> Denne hjemmeside er en samling af mine tanker, forberedelser og erfaringer på vejen mod at gøre drømmen til virkelighed. Måske overvejer du selv en lignende rejse, eller måske er du bare nysgerrig på, hvordan det er at tage springet. Her deler jeg min rejse fra de første spæde idéer til de praktiske skridt mod et nyt liv i Portugal. For mig og for Erika.</p>
<hr class="major" /> <hr class="major" />
<h2>Magna etiam veroeros</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel sed vehicula.</p>
<p>Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fersapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit tristique lorem ipsum dolor.</p>
<hr class="major" />
<h2>Lorem aliquam bibendum</h2>
<p>Donec eget ex magna. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque venenatis dolor imperdiet dolor mattis sagittis. Praesent rutrum sem diam, vitae egestas enim auctor sit amet. Pellentesque leo mauris, consectetur id ipsum sit amet, fergiat. Pellentesque in mi eu massa lacinia malesuada et a elit. Donec urna ex, lacinia in purus ac, pretium pulvinar mauris. Curabitur sapien risus, commodo eget turpis at, elementum convallis elit. Pellentesque enim turpis, hendrerit.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis dapibus rutrum facilisis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam tristique libero eu nibh porttitor fermentum. Nullam venenatis erat id vehicula viverra. Nunc ultrices eros ut ultricies condimentum. Mauris risus lacus, blandit sit amet venenatis non, bibendum vitae dolor. Nunc lorem mauris, fringilla in aliquam at, euismod in lectus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In non lorem sit amet elit placerat maximus. Pellentesque aliquam maximus risus, vel sed vehicula.</p>
</section> </section>
</div> </div>
@@ -84,44 +60,30 @@
<h2>Menu</h2> <h2>Menu</h2>
</header> </header>
<ul> <ul>
<li><a href="index.html">Homepage</a></li> <li><a href="lifefaq.html">Forside</a></li>
<li><a href="generic.html">Generic</a></li>
<li><a href="elements.html">Elements</a></li>
<li> <li>
<span class="opener">Submenu</span> <span class="opener">Kategorier</span>
<ul> <ul>
<li><a href="#">Lorem Dolor</a></li> <li><a href="#">SKAT</a></li>
<li><a href="#">Ipsum Adipiscing</a></li> <li><a href="#">Skole</a></li>
<li><a href="#">Tempus Magna</a></li> <li><a href="#">Bolig</a></li>
<li><a href="#">Feugiat Veroeros</a></li> <li><a href="#">Job</a></li>
</ul> </ul>
</li> </li>
<li><a href="#">Etiam Dolore</a></li> <li><a href="lifefaq.html">Fotobog</a></li>
<li><a href="#">Adipiscing</a></li>
<li>
<span class="opener">Another Submenu</span>
<ul>
<li><a href="#">Lorem Dolor</a></li>
<li><a href="#">Ipsum Adipiscing</a></li>
<li><a href="#">Tempus Magna</a></li>
<li><a href="#">Feugiat Veroeros</a></li>
</ul>
</li>
<li><a href="#">Maximus Erat</a></li>
<li><a href="#">Sapien Mauris</a></li>
<li><a href="#">Amet Lacinia</a></li>
</ul> </ul>
</nav> </nav>
<!-- Section --> <!-- Section -->
<section> <section>
<header class="major"> <header class="major">
<h2>Ante interdum</h2> <h2>Highlights</h2>
</header> </header>
<div class="mini-posts"> <div class="mini-posts">
<article> <article>
<a href="#" class="image"><img src="images/pic07.jpg" alt="" /></a> <a href="#" class="image"><img src="images/pic07.jpg" alt="" /></a>
<p>Aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore aliquam.</p> <p>Farvorit Kategoi</p>
</article> </article>
<article> <article>
<a href="#" class="image"><img src="images/pic08.jpg" alt="" /></a> <a href="#" class="image"><img src="images/pic08.jpg" alt="" /></a>
@@ -140,20 +102,20 @@
<!-- Section --> <!-- Section -->
<section> <section>
<header class="major"> <header class="major">
<h2>Get in touch</h2> <h2>Kontakt os </h2>
</header> </header>
<p>Sed varius enim lorem ullamcorper dolore aliquam aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore. Proin sed aliquam facilisis ante interdum. Sed nulla amet lorem feugiat tempus aliquam.</p> <p>Har du spørgsmål eller ønsker du at vide mere om vores planer for Portugal? Skriv til mig, Henrik. Jeg deler gerne vores tanker og forberedelser, så du måske også kan finde inspiration til din egen rejse. Vi ser frem til at høre fra dig!</p>
<ul class="contact"> <ul class="contact">
<li class="icon solid fa-envelope"><a href="#">information@untitled.tld</a></li> <li class="icon solid fa-envelope"><a href="#">henrik@i80.dk</a></li>
<li class="icon solid fa-phone">(000) 000-0000</li> <li class="icon solid fa-phone">(+45) 60214417</li>
<li class="icon solid fa-home">1234 Somewhere Road #8254<br /> <li class="icon solid fa-home">Skovstræde 3<br />
Nashville, TN 00000-0000</li> Stensved, 4773</li>
</ul> </ul>
</section> </section>
<!-- Footer --> <!-- Footer -->
<footer id="footer"> <footer id="footer">
<p class="copyright">&copy; Untitled. All rights reserved. Demo Images: <a href="https://unsplash.com">Unsplash</a>. Design: <a href="https://html5up.net">HTML5 UP</a>.</p> <p class="copyright">&copy; Henriks lille hjørne: <a href="https://lifefaq.i80.dk">LifeFAQ</a> </p>
</footer> </footer>
</div> </div>

13
mock_data.json Normal file
View File

@@ -0,0 +1,13 @@
{
"categories": [
{"name": "SKAT", "path": "skat"},
{"name": "Skole", "path": "skole"},
{"name": "Bolig", "path": "bolig"},
{"name": "Job", "path": "job"}
],
"favorites": [
{"name": "SKAT", "image": "images/pic07.jpg", "description": "Farvorit Kategori"},
{"name": "Skole", "image": "images/pic08.jpg", "description": "Skole info"},
{"name": "Bolig", "image": "images/pic09.jpg", "description": "Bolig detaljer"}
]
}

14
templates/category.html Normal file
View File

@@ -0,0 +1,14 @@
<!DOCTYPE HTML>
<html>
<head>
<title>{{ category_name }} - PortugalFAQ</title>
<link rel="stylesheet" href="{{ url_for('static', path='css/main.css') }}" />
</head>
<body>
<div id="main">
<h1>{{ category_name }}</h1>
<div>{{ content | safe }}</div>
<a href="/">Tilbage til forsiden</a>
</div>
</body>
</html>

135
templates/index.html Normal file
View File

@@ -0,0 +1,135 @@
<!DOCTYPE HTML>
<html>
<head>
<title>PortugalFAQ - Henriks og Erikas lille side</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="{{ url_for('static', path='css/main.css') }}" />
</head>
<body class="is-preload">
<!-- Wrapper -->
<div id="wrapper">
<!-- Main -->
<div id="main">
<div class="inner">
<!-- Header -->
<header id="header">
<a href="/" class="logo"><strong>Forside</strong> af Henrik</a>
<ul class="icons">
<li><a href="#" class="icon brands fa-facebook-f"><span class="label">Facebook</span></a></li>
</ul>
</header>
<!-- Content -->
<section>
<header class="main">
<h1>Min Drøm om Portugal</h1>
<h2>En Frisk Start for Henrik og Erika</h2>
</header>
<span class="image main">
<img src="{{ url_for('static', path='images/pic11.jpg') }}" alt="Portugal" />
</span>
<hr class="major" />
<p>
Portugal er blevet symbolet på den nye begyndelse, jeg drømmer om en mulighed for at skabe et liv
med mere ro, plads og mening. Som Henrik, far til min 16-årige datter Erika, har tanken om at flytte
fra Danmark til Portugal vokset sig stærkere de seneste år. Det er ikke bare et ønske om sol og varme,
men om en hverdag, hvor livskvalitet betyder mere end stress og travlhed.
</p>
<p>
Drømmen er konkret: en hverdag med tid til både arbejde og familieliv, omgivet af Portugals smukke
landskaber og venlige kultur. Med Lissabon som udgangspunkt forestiller jeg mig et liv, hvor jeg
arbejder struktureret, pendler til Danmark i de lige uger og tilbringer de øvrige uger i vores nye
hjem. Det handler ikke om at efterlade alt bag sig, men om at finde en bedre balance mellem mine
forpligtelser i Danmark og en ny tilværelse, hvor solen skinner lidt længere.
</p>
<p>
For Erika er det også en chance for at opleve en ny kultur, møde nye mennesker og måske starte på
en ungdomsuddannelse i Portugal. Vi ved begge, at det ikke bliver uden udfordringer med praktiske
overvejelser som bolig, skat, pendling og skolegang men fordelene vejer tungere. Leveomkostningerne
er lavere, menneskerne er imødekommende, og tempoet giver plads til at trække vejret.
</p>
<p>
Denne hjemmeside er en samling af mine tanker, forberedelser og erfaringer på vejen mod at gøre
drømmen til virkelighed. Måske overvejer du selv en lignende rejse, eller måske er du bare nysgerrig
på, hvordan det er at tage springet. Her deler jeg min rejse fra de første spæde idéer til de
praktiske skridt mod et nyt liv i Portugal. For mig og for Erika.
</p>
<hr class="major" />
</section>
</div>
</div>
<!-- Sidebar -->
<div id="sidebar">
<div class="inner">
<!-- Menu -->
<nav id="menu">
<header class="major">
<h2>Menu</h2>
</header>
<ul>
<li><a href="/">Forside</a></li>
<li>
<span class="opener">Kategorier</span>
<ul>
{% for category in data.categories %}
<li>
<a href="/category/{{ category.path }}">{{ category.name }}</a>
</li>
{% endfor %}
</ul>
</li>
<li><a href="#">Fotobog</a></li>
</ul>
</nav>
<!-- Highlights (favoritter) -->
<section>
<header class="major">
<h2>Highlights</h2>
</header>
<div class="mini-posts">
{% for favorite in data.favorites %}
<article>
<a href="#" class="image">
<img src="{{ url_for('static', path=favorite.image) }}" alt="{{ favorite.name }}" />
</a>
<p>{{ favorite.description }}</p>
</article>
{% endfor %}
</div>
</section>
<!-- Kontakt -->
<section>
<header class="major">
<h2>Kontakt os</h2>
</header>
<ul class="contact">
<li class="icon solid fa-envelope"><a href="#">henrik@i80.dk</a></li>
<li class="icon solid fa-phone">(+45) 60214417</li>
<li class="icon solid fa-home">Skovstræde 3<br />Stensved, 4773</li>
</ul>
</section>
<!-- Footer -->
<footer id="footer">
<p class="copyright">
&copy; Henriks lille hjørne: <a href="https://lifefaq.i80.dk">LifeFAQ</a>
</p>
</footer>
</div>
</div>
</div>
<!-- Scripts -->
<script src="{{ url_for('static', path='js/jquery.min.js') }}"></script>
<script src="{{ url_for('static', path='js/browser.min.js') }}"></script>
<script src="{{ url_for('static', path='js/breakpoints.min.js') }}"></script>
<script src="{{ url_for('static', path='js/util.js') }}"></script>
<script src="{{ url_for('static', path='js/main.js') }}"></script>
</body>
</html>