This commit is contained in:
2026-08-26 13:11:10 +02:00
parent 72a4741cac
commit 134e463a81
6 changed files with 58 additions and 19 deletions
+1 -11
View File
@@ -47,17 +47,7 @@ On Windows PowerShell, activate the environment with:
.venv\Scripts\Activate.ps1
```
The SQLite database is created automatically at `backend/data/linklog.db` when the application starts or when the auth router is imported. The starter accounts are:
| Username | Password | Role |
| --- | --- | --- |
| `alice` | `secret123` | administrator |
| `bob` | `secret123` | standard user |
These credentials are for development only. Change the authentication and seeding design before deploying publicly.
The SQLite database is created automatically at `backend/data/linklog.db` when the application starts. On a fresh installation, open `/setup` and create the first administrator. No default user accounts are created by the application. The setup page also collects SMTP settings and requires a successful test email before creating the administrator.
The database schema is versioned with SQLite `PRAGMA user_version`. Application startup applies all pending migrations in order, so updating the application does not require deleting an existing database. New schema changes should be added as a new numbered migration in `backend/app/database.py`; existing migration entries must remain unchanged.
## Run The Backend
+20
View File
@@ -284,6 +284,26 @@ Add three other popular themes.
### Assistant outcome
Added Dracula, Nord, and Solarized themes to the administrators multi-theme selector and the visitor theme picker, with matching backend registry entries, CSS palettes, test coverage, and documentation.
### User
Show tags in the LinkLog on the bottom left, move the date to the bottom right, and horizontally align the tags with the date.
### Assistant outcome
Grouped tags and dates into a shared bottom metadata row, placing tags on the left and the date on the right with responsive wrapping for narrow screens.
## 2026-08-26
### User
Continue todos.
### Assistant outcome
Reviewed the requirements and source for unfinished TODO markers. No implementation TODOs remain; corrected the READMEs stale default-account instructions to match the current first-run administrator setup flow, then validated the project.
### User
Do not show `no comment provided`; leave the comment empty when no comment has been provided.
### Assistant outcome
Changed feed rendering to leave the comment area empty when a link has no comment, removing the `No comment provided` placeholder. Added a regression assertion and validated the change.
### User
Show the avatar with each entry on the home page. On the specific /<user>/ page don't show the avatar and user name with each entry
+3
View File
@@ -133,6 +133,9 @@
124. In the admin screen allow to select multiple themes for the backend. Create at least one plain day and one night theme, and add in all catpuccin themes for good measure.
125. For the day and latte themes the contrast on the link items is too low.
126. Add 3 other of the most popular themes.
127. Show the tags in the linklog on the bottom left, move the date to the bottom right - horizontally align the tags with the date.
128. Continue todos.
129. Do not show 'no comment provided' but leave empty when no comment has been provided.
## Future entries
+3
View File
@@ -493,6 +493,9 @@ def test_public_and_admin_pages_render_html():
assert 'postToMastodon(item, mastodonButton)' in feed_script
assert 'tag.toLowerCase() === pref.tag.toLowerCase()' in feed_script
assert 'return `${date.getFullYear()} ${months[date.getMonth()]} ${date.getDate()} - ${hours}:${minutes}`' in feed_script
assert "entryMeta.className = 'entry-meta'" in feed_script
assert "meta.className = 'meta'" in feed_script
assert "comment.textContent = item.comment || ''" in feed_script
assert 'profileLink.href = `/${encodeURIComponent(username)}/`' in feed_script
assert 'edit-tag-options' in feed_script
assert 'new_tags' in feed_script
+7 -3
View File
@@ -104,18 +104,22 @@ function renderFeed(items, showIdentity = true) {
const comment = document.createElement('div');
comment.className = 'comment';
comment.textContent = item.comment || 'No comment provided';
comment.textContent = item.comment || '';
const entryMeta = document.createElement('div');
entryMeta.className = 'entry-meta';
if (item.tags?.length) {
const tags = document.createElement('div');
tags.className = 'entry-tags';
tags.textContent = item.tags.join(' ');
article.appendChild(tags);
entryMeta.appendChild(tags);
}
const meta = document.createElement('div');
meta.className = 'meta';
meta.textContent = formatDate(item.created_at);
entryMeta.appendChild(meta);
if (item.is_owner && !showIdentity) {
const actions = document.createElement('div');
@@ -161,7 +165,7 @@ function renderFeed(items, showIdentity = true) {
}
article.appendChild(title);
article.appendChild(comment);
article.appendChild(meta);
article.appendChild(entryMeta);
feedEl.appendChild(article);
});
}
+23 -4
View File
@@ -632,7 +632,7 @@ button:disabled {
.link-item h2 {
margin: 0 0 8px;
color: var(--text);
font-size: 1.2rem;
font-size: 1rem;
line-height: 1.25;
}
@@ -641,7 +641,7 @@ button:disabled {
align-items: center;
float: right;
gap: 12px;
margin: 0 0 12px 18px;
margin: 0 0 2px 8px;
}
.user-link {
@@ -694,18 +694,27 @@ button:disabled {
}
.meta {
margin-top: 4px;
margin-left: auto;
color: var(--muted);
font-size: 0.82rem;
text-align: right;
}
.entry-tags {
margin-top: 12px;
color: var(--mauve);
font-size: 0.85rem;
font-weight: 600;
}
.entry-meta {
display: flex;
align-items: baseline;
justify-content: space-between;
clear: both;
gap: 16px;
margin-top: 14px;
}
@media (max-width: 600px) {
.container {
padding: 0 14px;
@@ -759,6 +768,16 @@ button:disabled {
padding: 14px;
}
.entry-meta {
align-items: flex-start;
flex-wrap: wrap;
gap: 4px 12px;
}
.meta {
margin-left: auto;
}
.toolbar label,
select,
input,