Date: 2026-03-09
Status: Analysis & Recommendations
Current Format:
https://gitlog.app/changelog/{username}/{repo}
Example:
https://gitlog.app/changelog/acme/corp-website
Footer Branding: ✅ Already Implemented
- ✅ "Powered by GitLog" with logo
- ✅ Links to gitlog.app
- ✅ "Create your changelog" CTA
- ✅ Subscribe link
SEO Meta Tags: ✅ Already Implemented
- ✅ Title includes "| GitLog"
- ✅ Open Graph tags
- ✅ Twitter cards
- ✅ JSON-LD structured data
URL: gitlog.app/changelog/{username}/{repo}
Pros:
- ✅ Clear hierarchy
- ✅ SEO-friendly (keyword: "changelog")
- ✅ Already implemented
- ✅ Easy to understand
- ✅ Good for GitLog discoverability
Cons:
- ❌ Longer URL
- ❌ "changelog" might be redundant
Verdict: ✅ KEEP AS-IS - Works well for SEO and branding
URL: gitlog.app/{username}/{repo}
Example:
https://gitlog.app/acme/corp-website
Pros:
- ✅ Shorter, cleaner URL
- ✅ Easier to share
- ✅ More professional appearance
Cons:
- ❌ Less SEO value (no "changelog" keyword)
- ❌ Requires route changes
- ❌ Might conflict with other routes
Implementation Required:
// Move from:
src / app / public / changelog / [username] / [repo] / page.tsx;
// To:
src / app / public / [username] / [repo] / page.tsx;Verdict:
URL: {repo}.changelog.gitlog.app or {username}.gitlog.app
Example:
https://acme.gitlog.app
https://corp-website.changelog.gitlog.app
Pros:
- ✅ Very professional
- ✅ Brandable per user
- ✅ Feels like dedicated site
Cons:
- ❌ Complex DNS setup (wildcard subdomains)
- ❌ SSL certificate complexity
- ❌ Cookie sharing issues
- ❌ Requires Next.js middleware
- ❌ Harder to maintain
Implementation Required:
// middleware.ts
export function middleware(request: NextRequest) {
const hostname = request.headers.get('host') || '';
const subdomain = hostname.split('.')[0];
// Rewrite to appropriate route
return NextRewrite.rewrite(`/${subdomain}`);
}Verdict: ❌ TOO COMPLEX - Not worth it for MVP
URL: gitlog.app/{slug} or gitlog.app/c/{slug}
Example:
https://gitlog.app/acme
https://gitlog.app/c/acme (c = changelog)
User Sets:
- GitHub repo:
acme/corp-website - Custom slug:
acmeoracme-corp
Pros:
- ✅ Clean, short URLs
- ✅ User-friendly
- ✅ Brandable
- ✅ Still SEO-friendly
Cons:
- ❌ Requires slug management
- ❌ Slug conflicts possible
- ❌ Additional database field
Implementation Required:
// Add to repo schema:
interface ConnectedRepo {
// ... existing fields
customSlug?: string; // user-defined slug
}
// Lookup by slug:
const repo = await kv.get(`slug:${customSlug}`);Verdict: 🟡 GOOD FOR FUTURE - Implement post-launch
Current:
Powered by GitLog → [Logo] GitLog
Improved:
Powered by GitLog → [Logo] GitLog
Create your own changelog → [CTA Button]
Implementation:
<footer>
<div className="flex items-center justify-between">
{/* Left: Branding */}
<div className="flex items-center gap-2">
<GitMerge className="h-4 w-4 text-accent" />
<span className="text-sm text-muted">Powered by</span>
<a href="https://gitlog.app" className="font-semibold text-accent">
GitLog
</a>
</div>
{/* Right: CTA */}
<a
href="https://gitlog.app"
className="inline-flex items-center gap-2 px-4 py-2 bg-accent text-white rounded-md text-sm font-semibold hover:bg-accent/90"
>
<Sparkles className="h-4 w-4" />
Create your changelog
</a>
</div>
</footer>Purpose: Show GitLog branding more prominently
Implementation:
{
/* GitLog Badge */
}
<div className="fixed bottom-4 right-4 z-50">
<a
href="https://gitlog.app"
target="_blank"
rel="noopener noreferrer"
className="inline-flex items-center gap-2 px-3 py-2 bg-surface-elevated border border-line rounded-lg shadow-lg hover:border-accent transition-colors"
>
<GitMerge className="h-4 w-4 text-accent" />
<span className="text-sm font-medium">Changelog</span>
</a>
</div>;Placement Options:
- Bottom-right corner (fixed)
- Footer (static)
- Sidebar (for multi-page changelogs)
Purpose: Show GitHub user and repo details
Implementation:
{
/* Header with GitHub info */
}
<div className="flex items-center gap-4 mb-6">
{/* User Avatar */}
<img
src={`https://github.com/${username}.png`}
alt={username}
className="h-12 w-12 rounded-full"
/>
{/* Repo Info */}
<div>
<h1 className="text-2xl font-bold">
{username}/{repo} Changelog
</h1>
<div className="flex items-center gap-2 text-sm text-muted">
<a href={`https://github.com/${username}`} target="_blank" className="hover:text-accent">
@{username}
</a>
<span>•</span>
<a
href={`https://github.com/${username}/${repo}`}
target="_blank"
className="hover:text-accent"
>
{repo}
</a>
<span>•</span>
<a
href={`https://github.com/${username}/${repo}/stargazers`}
target="_blank"
className="hover:text-accent"
>
⭐ {stars}
</a>
</div>
</div>
</div>;Benefits:
- ✅ Shows GitHub integration
- ✅ Links to actual repo
- ✅ Displays social proof (stars)
- ✅ More professional appearance
New API Endpoint:
// /api/github/repo-details
export async function GET(req: Request) {
const { username, repo } = await req.json();
const octokit = new Octokit({ auth: githubToken });
const { data } = await octokit.rest.repos.get({
owner: username,
repo: repo,
});
return NextResponse.json({
name: data.name,
description: data.description,
stars: data.stargazers_count,
forks: data.forks_count,
avatar: data.owner.avatar_url,
url: data.html_url,
});
}Usage in Changelog Page:
// Fetch repo details
const repoDetails = await fetch('/api/github/repo-details', {
method: 'POST',
body: JSON.stringify({ username, repo }),
}).then(res => res.json());
// Display in header
<div>
<p className="text-muted">{repoDetails.description}</p>
<div className="flex items-center gap-4">
<span>⭐ {repoDetails.stars}</span>
<span>🍴 {repoDetails.forks}</span>
</div>
</div>Purpose: Show other changelogs from same user
Implementation:
// Fetch user's other repos with changelogs
const userRepos = await getUserChangelogs(username);
// Display section
{userRepos.length > 1 && (
<section className="mt-12">
<h2 className="text-xl font-semibold mb-4">
More from @{username}
</h2>
<div className="grid gap-4 md:grid-cols-2">
{userRepos
.filter(r => r.name !== repo)
.map(r => (
<Link
key={r.name}
href={`/changelog/${username}/${r.name}`}
className="p-4 rounded-lg border border-line hover:border-accent transition-colors"
>
<h3 className="font-semibold">{r.name}</h3>
<p className="text-sm text-muted">
{r.entryCount} entries
</p>
</Link>
))}
</div>
</section>
)}Purpose: Make changelog shareable on social media
Implementation:
{
/* Share Buttons */
}
<div className="flex items-center gap-2">
<span className="text-sm text-muted">Share:</span>
{/* Twitter */}
<a
href={`https://twitter.com/intent/tweet?text=Check out the changelog for ${repo}&url=${currentUrl}`}
target="_blank"
rel="noopener noreferrer"
className="p-2 rounded-lg border border-line hover:bg-twitter/10 hover:border-twitter/50 transition-colors"
>
<Twitter className="h-4 w-4" />
</a>
{/* LinkedIn */}
<a
href={`https://www.linkedin.com/sharing/share-offsite/?url=${currentUrl}`}
target="_blank"
rel="noopener noreferrer"
className="p-2 rounded-lg border border-line hover:bg-linkedin/10 hover:border-linkedin/50 transition-colors"
>
<Linkedin className="h-4 w-4" />
</a>
{/* Copy Link */}
<button
onClick={() => navigator.clipboard.writeText(currentUrl)}
className="p-2 rounded-lg border border-line hover:bg-surface-highlight transition-colors"
>
<Link className="h-4 w-4" />
</button>
</div>;Purpose: Allow users to subscribe via RSS
Implementation:
// /api/changelog/[username]/[repo]/rss/route.ts
export async function GET(req: Request) {
const { username, repo } = await req.params;
const entries = await getPublishedEntries(username, repo);
const rss = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>${repo} Changelog</title>
<link>${siteConfig.url}/changelog/${username}/${repo}</link>
<description>Latest updates for ${repo}</description>
${entries
.map(
(entry) => `
<item>
<title>${entry.title}</title>
<link>${siteConfig.url}/changelog/${username}/${repo}#${entry.id}</link>
<pubDate>${new Date(entry.publishedAt).toUTCString()}</pubDate>
<description>${entry.aiRewrite || entry.body}</description>
</item>
`
)
.join('')}
</channel>
</rss>`;
return new NextResponse(rss, {
headers: { 'Content-Type': 'application/xml' },
});
}Add to Page:
<link
rel="alternate"
type="application/rss+xml"
title={`${repo} Changelog RSS`}
href={`/api/changelog/${username}/${repo}/rss`}
/>| Feature | Current | Recommended | Effort | Impact |
|---|---|---|---|---|
| URL Structure | /changelog/{user}/{repo} |
Keep as-is | ✅ Done | ✅ High |
| Footer Branding | Basic | Enhanced CTA | 🟡 Low | 🟡 Medium |
| GitLog Badge | ❌ | Add floating badge | 🟡 Low | 🟡 Medium |
| GitHub Metadata | ❌ | Show user/repo info | 🟡 Low | ✅ High |
| Repo Details API | ❌ | Fetch from GitHub | 🟡 Medium | ✅ High |
| More from User | ❌ | Cross-link changelogs | 🟡 Medium | 🟡 Medium |
| Social Sharing | ❌ | Twitter/LinkedIn buttons | 🟡 Low | ✅ High |
| RSS Feed | ❌ | Auto-generated RSS | 🟡 Medium | 🟡 Medium |
-
Keep Current URL Structure ✅
gitlog.app/changelog/{username}/{repo}- Good for SEO
- Already working
-
Add GitHub User/Repo Display ✅
- Show avatar, username, repo name
- Link to GitHub
- Display stars/forks
-
Enhance Footer CTA ✅
- Make "Create your changelog" more prominent
- Add icon
- Better styling
-
Add Social Sharing ✅
- Twitter share button
- LinkedIn share button
- Copy link button
-
Add RSS Feed ✅
- Auto-generate from entries
- Add to page metadata
-
Add "More from User" ✅
- Cross-link other changelogs
- Increase engagement
-
Add Floating Badge ✅
- Subtle GitLog branding
- Fixed position
-
Custom Slugs
- Allow users to set custom URLs
gitlog.app/acmeinstead ofgitlog.app/acme/corp-website
-
Advanced Analytics
- Show view counts to repo owners
- Track popular changelogs
URL: gitlog.app/changelog/{username}/{repo}
Why:
- ✅ Already implemented
- ✅ SEO-friendly (has "changelog" keyword)
- ✅ Clear hierarchy
- ✅ Easy to understand
- ✅ Good GitLog branding
Immediate (Today):
- ✅ Add GitHub user avatar & repo details
- ✅ Link to GitHub repo
- ✅ Enhance footer CTA button
This Week: 4. ✅ Add social sharing buttons 5. ✅ Create RSS feed
Next Week: 6. ✅ Add "More from this user" section 7. ✅ Optional: Floating GitLog badge
✅ Current URL Structure (Keep)
│
├─ ✅ Add GitHub Metadata (High Priority)
│ ├─ User avatar
│ ├─ Repo name & description
│ ├─ Stars/forks count
│ └─ Link to GitHub
│
├─ ✅ Enhance Footer (High Priority)
│ ├─ Better CTA button
│ ├─ Add icon
│ └─ Improve styling
│
├─ ✅ Social Sharing (Medium Priority)
│ ├─ Twitter button
│ ├─ LinkedIn button
│ └─ Copy link
│
└─ ✅ RSS Feed (Medium Priority)
├─ Auto-generate XML
└─ Add to metadata
Verdict: ✅ Current URL structure is GOOD - Enhance with metadata and social features!
Last Updated: 2026-03-09
Recommendation: Keep current URLs, add GitHub metadata & social features