Add minimal, production-ready static HTML identity page as reference implementation for IndieAuth authentication. Includes: - Complete identity-page.html with h-card and IndieAuth endpoints - Architectural documentation and rationale - ADR-010: Static Identity Page decision record - Customization guide for users The example is zero-dependency, copy-paste ready, and guaranteed to work with IndieLogin.com and StarPunk. Pre-configured for thesatelliteoflove.com as working example. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
271 lines
8.1 KiB
HTML
271 lines
8.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<!--
|
|
============================================================
|
|
IndieAuth Identity Page - Minimal Reference Implementation
|
|
============================================================
|
|
|
|
This is a complete, working IndieAuth identity page that requires:
|
|
- Zero JavaScript
|
|
- Zero external dependencies
|
|
- Only this single HTML file
|
|
|
|
To use this template:
|
|
1. Replace "Phil Skents" with your name
|
|
2. Replace "https://thesatelliteoflove.com" with your domain
|
|
3. Optionally add your social media profiles with rel="me"
|
|
4. Upload to your domain root (e.g., index.html)
|
|
5. Test at https://indielogin.com/
|
|
|
|
============================================================
|
|
-->
|
|
|
|
<!-- Required: Character encoding -->
|
|
<meta charset="utf-8">
|
|
|
|
<!-- Required: Responsive viewport -->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<!-- Page title: Your name -->
|
|
<title>Phil Skents</title>
|
|
|
|
<!--
|
|
============================================================
|
|
CRITICAL: IndieAuth Endpoint Discovery
|
|
These links tell IndieAuth clients where to authenticate.
|
|
Using indieauth.com as a public service that works for everyone.
|
|
============================================================
|
|
-->
|
|
|
|
<!-- Required: Authorization endpoint for IndieAuth -->
|
|
<link rel="authorization_endpoint" href="https://indieauth.com/auth">
|
|
|
|
<!-- Required: Token endpoint for obtaining access tokens -->
|
|
<link rel="token_endpoint" href="https://tokens.indieauth.com/token">
|
|
|
|
<!--
|
|
Optional: If you have a Micropub server (like StarPunk), add:
|
|
<link rel="micropub" href="https://starpunk.thesatelliteoflove.com/micropub">
|
|
-->
|
|
|
|
<!-- Optional: Minimal styling for readability -->
|
|
<style>
|
|
/* Reset and base styles */
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
"Helvetica Neue", Arial, sans-serif;
|
|
line-height: 1.6;
|
|
color: #333;
|
|
background: #fff;
|
|
padding: 2rem;
|
|
max-width: 600px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
/* Typography */
|
|
h1 {
|
|
font-size: 2rem;
|
|
margin-bottom: 0.5rem;
|
|
color: #000;
|
|
}
|
|
|
|
p {
|
|
margin: 1rem 0;
|
|
}
|
|
|
|
a {
|
|
color: #0066cc;
|
|
text-decoration: none;
|
|
}
|
|
|
|
a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
/* Layout */
|
|
.h-card {
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.identity-url {
|
|
font-size: 1.1rem;
|
|
color: #666;
|
|
margin-bottom: 1.5rem;
|
|
}
|
|
|
|
.social-links {
|
|
margin-top: 2rem;
|
|
padding-top: 2rem;
|
|
border-top: 1px solid #eee;
|
|
}
|
|
|
|
.social-links h2 {
|
|
font-size: 1.2rem;
|
|
margin-bottom: 1rem;
|
|
color: #666;
|
|
}
|
|
|
|
.social-links ul {
|
|
list-style: none;
|
|
}
|
|
|
|
.social-links li {
|
|
margin: 0.5rem 0;
|
|
}
|
|
|
|
/* Optional: Avatar styling */
|
|
.u-photo {
|
|
width: 120px;
|
|
height: 120px;
|
|
border-radius: 60px;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
/* Info box */
|
|
.info-box {
|
|
background: #f5f5f5;
|
|
border-left: 4px solid #0066cc;
|
|
padding: 1rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.info-box h3 {
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.info-box p {
|
|
margin: 0.5rem 0;
|
|
font-size: 0.9rem;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!--
|
|
============================================================
|
|
h-card Microformat: Your Identity Information
|
|
This is machine-readable markup that IndieAuth uses to
|
|
identify you. The h-card is the IndieWeb's business card.
|
|
============================================================
|
|
-->
|
|
<div class="h-card">
|
|
<!-- Optional: Your photo/avatar
|
|
<img class="u-photo" src="/avatar.jpg" alt="Phil Skents">
|
|
-->
|
|
|
|
<!-- Required: Your name (p-name) -->
|
|
<h1 class="p-name">Phil Skents</h1>
|
|
|
|
<!-- Required: Your identity URL (u-url)
|
|
MUST match the URL where this page is hosted -->
|
|
<div class="identity-url">
|
|
<a class="u-url" href="https://thesatelliteoflove.com" rel="me">
|
|
https://thesatelliteoflove.com
|
|
</a>
|
|
</div>
|
|
|
|
<!-- Optional: Brief bio or description -->
|
|
<p class="p-note">
|
|
IndieWeb enthusiast building minimal, standards-compliant web tools.
|
|
Creator of StarPunk CMS.
|
|
</p>
|
|
|
|
<!--
|
|
============================================================
|
|
Optional: Social Media Links with rel="me"
|
|
These create a web of trust by linking your identities.
|
|
Only include profiles you control.
|
|
The receiving site should link back with rel="me" for
|
|
bidirectional verification (GitHub and some others do this).
|
|
============================================================
|
|
-->
|
|
<div class="social-links">
|
|
<h2>Also me on the web</h2>
|
|
<ul>
|
|
<!-- Example social links - replace with your actual profiles -->
|
|
<!--
|
|
<li>
|
|
<a href="https://github.com/yourusername" rel="me">
|
|
GitHub: @yourusername
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="https://mastodon.social/@yourusername" rel="me">
|
|
Mastodon: @yourusername@mastodon.social
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="https://twitter.com/yourusername" rel="me">
|
|
Twitter: @yourusername
|
|
</a>
|
|
</li>
|
|
-->
|
|
|
|
<!-- For now, just a note about StarPunk -->
|
|
<li>
|
|
Publishing with
|
|
<a href="https://starpunk.thesatelliteoflove.com">
|
|
StarPunk
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!--
|
|
============================================================
|
|
Information Box: How This Works
|
|
This section is optional but helpful for visitors.
|
|
============================================================
|
|
-->
|
|
<div class="info-box">
|
|
<h3>About This Page</h3>
|
|
<p>
|
|
This is my IndieAuth identity page. It allows me to sign in to
|
|
IndieWeb services using my domain name instead of passwords.
|
|
</p>
|
|
<p>
|
|
<strong>Technical:</strong> This page uses
|
|
<a href="https://indieauth.spec.indieweb.org/">IndieAuth</a> for
|
|
authentication and
|
|
<a href="http://microformats.org/wiki/h-card">h-card microformats</a>
|
|
for identity markup.
|
|
</p>
|
|
<p>
|
|
<strong>Privacy:</strong> Authentication is handled by
|
|
<a href="https://indieauth.com">IndieAuth.com</a>.
|
|
No passwords or personal data are stored on this site.
|
|
</p>
|
|
</div>
|
|
|
|
<!--
|
|
============================================================
|
|
Testing Your Identity Page
|
|
|
|
After uploading this file to your domain:
|
|
|
|
1. Visit https://indielogin.com/
|
|
2. Enter your domain (e.g., https://thesatelliteoflove.com)
|
|
3. You should see IndieAuth.com as an option
|
|
4. Complete the authentication flow
|
|
|
|
To validate your h-card:
|
|
1. Visit https://indiewebify.me/
|
|
2. Use the h-card validator
|
|
3. Enter your domain
|
|
4. Verify all information is detected
|
|
|
|
Common Issues:
|
|
- URL mismatch: The u-url must exactly match your domain
|
|
- Missing HTTPS: Both your domain and endpoints need HTTPS
|
|
- Wrong endpoints: The endpoint URLs must be exactly as shown
|
|
============================================================
|
|
-->
|
|
</body>
|
|
</html> |