Skip to content

Latest commit

 

History

History
638 lines (479 loc) · 13.9 KB

File metadata and controls

638 lines (479 loc) · 13.9 KB

GitLog Branding & URL Strategy - Recommendations

Date: 2026-03-09
Status: Analysis & Recommendations


📊 Current Implementation

Public Changelog URL Structure

Current Format:

https://gitlog.app/changelog/{username}/{repo}

Example:

https://gitlog.app/changelog/acme/corp-website

Current Branding

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

💡 Recommendations for Better Branding & Discoverability

Option 1: Current Structure (Recommended) ✅

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


Option 2: Shorter URLs (Alternative)

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: ⚠️ NOT RECOMMENDED - Lose SEO benefits


Option 3: Custom Subdomains (Advanced)

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


Option 4: Custom Slugs (Best of Both Worlds)

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: acme or acme-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


🎯 Recommended Improvements (Current Structure)

1. Enhanced Footer Branding ✅

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>

2. Add GitLog Badge/Widget ✅

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)

3. Add User/Repo Metadata Display ✅

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

4. Add GitHub Repo Details API ✅

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>

5. Add "More from this User" Section ✅

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>
)}

6. Add Social Sharing Cards ✅

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>;

7. Add RSS Feed ✅

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`}
/>

📊 Comparison Table

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

🎯 Priority Recommendations

Critical (Do Now) ✅

  1. Keep Current URL Structure

    • gitlog.app/changelog/{username}/{repo}
    • Good for SEO
    • Already working
  2. Add GitHub User/Repo Display

    • Show avatar, username, repo name
    • Link to GitHub
    • Display stars/forks
  3. Enhance Footer CTA

    • Make "Create your changelog" more prominent
    • Add icon
    • Better styling

High Priority (Week 1) 🟡

  1. Add Social Sharing

    • Twitter share button
    • LinkedIn share button
    • Copy link button
  2. Add RSS Feed

    • Auto-generate from entries
    • Add to page metadata

Medium Priority (Week 2) 🟢

  1. Add "More from User"

    • Cross-link other changelogs
    • Increase engagement
  2. Add Floating Badge

    • Subtle GitLog branding
    • Fixed position

Future (Post-Launch) 🔵

  1. Custom Slugs

    • Allow users to set custom URLs
    • gitlog.app/acme instead of gitlog.app/acme/corp-website
  2. Advanced Analytics

    • Show view counts to repo owners
    • Track popular changelogs

💡 Final Recommendation

Keep Current URL Structure

URL: gitlog.app/changelog/{username}/{repo}

Why:

  • ✅ Already implemented
  • ✅ SEO-friendly (has "changelog" keyword)
  • ✅ Clear hierarchy
  • ✅ Easy to understand
  • ✅ Good GitLog branding

Add These Improvements:

Immediate (Today):

  1. ✅ Add GitHub user avatar & repo details
  2. ✅ Link to GitHub repo
  3. ✅ 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


📝 Implementation Priority

✅ 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