diff --git a/src/app/components.css b/src/app/components.css
index bf79c83..cedc800 100644
--- a/src/app/components.css
+++ b/src/app/components.css
@@ -124,6 +124,30 @@
}
.md a:hover { color: #ddd6fe; }
+ /* Bilder werden nicht geladen, sondern als Marke gezeigt – siehe die
+ Begruendung in Markdown.tsx. Damit sie nicht wie Fliesstext aussieht,
+ bekommt sie einen Rahmen und ein Symbol davor. */
+ .md .md-image {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.3em;
+ border: 1px dashed rgba(255, 255, 255, 0.16);
+ border-radius: 0.4rem;
+ padding: 0.05em 0.45em;
+ font-size: 0.85em;
+ color: #8a98b0;
+ text-decoration: none;
+ vertical-align: baseline;
+ }
+ .md .md-image::before {
+ content: "▣";
+ opacity: 0.6;
+ }
+ .md a.md-image:hover {
+ color: #c4b5fd;
+ border-color: rgba(196, 181, 253, 0.4);
+ }
+
.md strong { color: #f1f5f9; font-weight: 600; }
.md ul, .md ol { margin: 0.75em 0; padding-left: 1.35em; }
diff --git a/src/app/projects/[id]/page.tsx b/src/app/projects/[id]/page.tsx
index 3fdbfc6..b975665 100644
--- a/src/app/projects/[id]/page.tsx
+++ b/src/app/projects/[id]/page.tsx
@@ -5,6 +5,7 @@ import { ActivityFeed } from "@/components/ActivityFeed";
import { GitPanel } from "@/components/GitPanel";
import { Markdown } from "@/components/Markdown";
import { NotesPanel } from "@/components/NotesPanel";
+import { ReadmePanel } from "@/components/ReadmePanel";
import { ProjectHeader } from "@/components/ProjectHeader";
import { TaskBoard } from "@/components/tasks/TaskBoard";
import { requireUserPage } from "@/lib/auth/guard";
@@ -54,6 +55,20 @@ export default async function ProjectPage({ params }: PageProps) {
const detail = project as unknown as ProjectDetail;
+ const fuehrend = detail.repositories[0]?.snapshot;
+ const readme = fuehrend?.readme
+ ? {
+ content: fuehrend.readme,
+ path: fuehrend.readmePath,
+ baseUrl: fuehrend.readmeBaseUrl,
+ // Die Basis endet auf dem Verzeichnis; angehaengt ergibt das die Datei.
+ fileUrl:
+ fuehrend.readmeBaseUrl && fuehrend.readmePath
+ ? `${fuehrend.readmeBaseUrl}${fuehrend.readmePath.split("/").pop()}`
+ : (fuehrend.htmlUrl ?? null),
+ }
+ : null;
+
return (
+ {/* Das README des fuehrenden Repositories – bei mehreren waere eine
+ zweite Vorschau untereinander mehr Laenge als Nutzen. */}
+ {readme ? (
+
+ ) : null}
+
+
+ {/* Verlauf ueber den abgeschnittenen Rand, damit erkennbar ist, dass
+ es weitergeht. Nur wenn wirklich etwas verdeckt wird. */}
+ {!kurz && !offen ? (
+
+ ) : null}
+