better landing etc
This commit is contained in:
7
app.py
7
app.py
@@ -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
40
templates/landing.html
Normal 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 %}
|
||||
@@ -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
45
templates/roadmap.html
Normal 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;">← Back to Home</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user