better landing etc

This commit is contained in:
2026-02-10 20:27:57 +01:00
parent 5004726715
commit 6d08fbf801
4 changed files with 93 additions and 1 deletions

7
app.py
View File

@@ -26,8 +26,9 @@ def is_logged_in():
@app.route('/')
def index():
# If not logged in, show the landing page instead of redirecting
if not is_logged_in():
return redirect(url_for('login'))
return render_template('landing.html')
user_id = get_user_id()
@@ -99,6 +100,10 @@ def logout():
session.clear()
return redirect(url_for('login'))
@app.route('/roadmap')
def roadmap():
return render_template('roadmap.html')
@app.route('/add_activity', methods=['POST'])
def add_activity():
if not is_logged_in(): return redirect(url_for('login'))

40
templates/landing.html Normal file
View File

@@ -0,0 +1,40 @@
{% extends "layout.html" %}
{% block content %}
<div style="max-width: 680px; margin: 4rem auto; text-align: left;">
<h1 style="font-size: 3rem; margin-bottom: 2rem; letter-spacing: -0.03em;">OpenTimeTracker</h1>
<div style="font-size: 1.15rem; line-height: 1.8; color: var(--text-primary);">
<p>
If you are like me, you often wonder how the day could pass by so quickly.
Or maybe, like me, you just need a simple tool to track your time so you don't overwork yourself.
</p>
<p>
<strong>OpenTimeTracker is for you.</strong> You can even host it yourself if you like.
</p>
<p>
There are no unnecessary collaboration features standing in your way. It is for you, and that should be enough.
</p>
<br>
<p>
Happy Tracking,<br>
<span style="font-weight: 600;">Calvin Erfmann</span>
</p>
<p style="margin-top: 2rem; font-size: 0.95rem;">
<a href="https://git.erfmann.dev/calvin.erfmann/OpenTimeTracker" target="_blank" style="color: var(--text-secondary); text-decoration: underline;">
View Source Code
</a>
</p>
</div>
<div style="margin-top: 3rem; display: flex; gap: 15px; align-items: center;">
<a href="{{ url_for('register') }}" class="btn" style="padding: 12px 24px; font-size: 1rem;">Get Started</a>
<a href="{{ url_for('login') }}" class="btn" style="background: white; color: var(--text-primary); border: 1px solid var(--border-dim); padding: 12px 24px; font-size: 1rem;">Login</a>
<a href="{{ url_for('roadmap') }}" style="margin-left: 10px; color: var(--text-secondary); text-decoration: none; font-size: 0.95rem;">Roadmap</a>
</div>
</div>
{% endblock %}

View File

@@ -4,6 +4,8 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>OpenTimeTracker</title>
<!-- Favicon: Simple Clock SVG -->
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%232383e2%22 stroke-width=%222%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22><circle cx=%2212%22 cy=%2212%22 r=%2210%22/><polyline points=%2212 6 12 12 16 14%22/></svg>">
<style>
:root {
--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;

45
templates/roadmap.html Normal file
View File

@@ -0,0 +1,45 @@
{% extends "layout.html" %}
{% block content %}
<div style="max-width: 680px; margin: 4rem auto;">
<h1 style="margin-bottom: 2rem;">Roadmap</h1>
<p style="color: var(--text-secondary); margin-bottom: 2rem;">Here is what we are working on regarding the future of OpenTimeTracker.</p>
<div class="card">
<div style="display: flex; gap: 20px; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-dim);">
<div style="min-width: 100px; font-weight: bold; color: var(--primary-color);">March 2026</div>
<div>
<h3 style="margin: 0; font-size: 1.1rem;">Export and Import Data</h3>
<p style="margin: 5px 0 0; color: var(--text-secondary);">Full control over your data. Migrate easily between instances.</p>
</div>
</div>
<div style="display: flex; gap: 20px; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-dim);">
<div style="min-width: 100px; font-weight: bold; color: var(--text-primary);">April 2026</div>
<div>
<h3 style="margin: 0; font-size: 1.1rem;">Calendar Sync via WebDAV</h3>
<p style="margin: 5px 0 0; color: var(--text-secondary);">See your tracked time entries directly in your favorite calendar app.</p>
</div>
</div>
<div style="display: flex; gap: 20px; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-dim);">
<div style="min-width: 100px; font-weight: bold; color: var(--text-primary);">May 2026</div>
<div>
<h3 style="margin: 0; font-size: 1.1rem;">API for Mobile and Desktop Apps</h3>
<p style="margin: 5px 0 0; color: var(--text-secondary);">Public API documentation to enable community integrations and native clients.</p>
</div>
</div>
<div style="display: flex; gap: 20px;">
<div style="min-width: 100px; font-weight: bold; color: var(--text-primary);">August 2026</div>
<div>
<h3 style="margin: 0; font-size: 1.1rem;">Mobile App for iOS and Android</h3>
<p style="margin: 5px 0 0; color: var(--text-secondary);">Native experience for tracking your time on the go.</p>
</div>
</div>
</div>
<div style="margin-top: 2rem;">
<a href="{{ url_for('index') }}" style="color: var(--text-secondary); text-decoration: none;">&larr; Back to Home</a>
</div>
</div>
{% endblock %}