feat: Implement comprehensive satware AG Benutzerkürzel redirect system (#106)
* feat: Add mkdocs-redirects plugin configuration for /ja → /team/jane.html redirect - Add redirects plugin to plugins section - Configure redirect mapping for /ja to /team/jane.html - Support multiple URL patterns and fallback redirects - Fixes issue #99 * feat: Add fallback redirect page for /ja → /team/jane.html - Create fallback redirect page with multiple redirect methods - Include meta refresh, JavaScript redirect, and manual link - Provides redundancy for redirect functionality - SEO-friendly with proper meta tags * feat: Add comprehensive redirect system for all team member Benutzerkürzel - Implement satware AG Benutzerkürzel system for all team members - Add redirects for all agents following collision resolution rules - Support both direct and index patterns for each abbreviation - Complete redirect mapping: * AA → Amira, BA → Bastian, BEA → Bea (collision resolved) * DA → Denopus, GA → Gunta, JA → Jane * JOA → John, JUA → Justus (collision resolved) * LA → Lara, LEA → Lenna, LEO → Leon, LUA → Luna * MA → Marco, OA → Olu, TA → Theo, WA → Wolfgang Fixes issue #99 * docs: Add comprehensive documentation for satware AG Benutzerkürzel redirect system - Document complete redirect system implementation - Include collision resolution rules and examples - List all team member abbreviations and target URLs - Provide testing instructions and troubleshooting guide --------- Co-authored-by: Michael Wegener <mw@satware.com>
This commit is contained in:
+176
@@ -0,0 +1,176 @@
|
|||||||
|
# satware AG Benutzerkürzel Redirect System
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This document describes the implementation of the satware AG Benutzerkürzel (user abbreviation) system for the satware.ai website. The system provides short URL redirects for all team members following company-wide naming conventions.
|
||||||
|
|
||||||
|
## Implementation Details
|
||||||
|
|
||||||
|
### Core Rules
|
||||||
|
|
||||||
|
1. **Minimum Length**: At least 2 characters, ideally 2 characters
|
||||||
|
2. **Formation**: **V**orname + **N**achname (First name + Last name)
|
||||||
|
3. **Collision-Free**: Each abbreviation must be unique company-wide
|
||||||
|
4. **Case**: Uppercase (Versalien) in normal use, lowercase in wiki/web context
|
||||||
|
5. **Maximum Length**: 3 characters maximum (Amicron compatibility)
|
||||||
|
|
||||||
|
### Collision Resolution
|
||||||
|
|
||||||
|
When abbreviations collide, the following resolution order is applied:
|
||||||
|
|
||||||
|
1. **Standard**: First letter of first name + first letter of last name
|
||||||
|
2. **Second letter of last name**: VN → VNA
|
||||||
|
3. **Second letter of first name**: VN → VON
|
||||||
|
4. **Middle name inclusion**: First name + Middle name + Last name → VMN
|
||||||
|
|
||||||
|
## Current Team Member Abbreviations
|
||||||
|
|
||||||
|
| Kürzel | Name | Target URL | Notes |
|
||||||
|
|--------|------|------------|-------|
|
||||||
|
| **AA** | Amira Alesi | `/team/amira.html` | Standard |
|
||||||
|
| **BA** | Bastian Alesi | `/team/bastian.html` | Standard |
|
||||||
|
| **BEA** | Bea Alesi | `/team/bea.html` | Collision resolved (BA taken) |
|
||||||
|
| **DA** | Denopus Alesi | `/team/denopus.html` | Standard |
|
||||||
|
| **GA** | Gunta Alesi | `/team/gunta.html` | Standard |
|
||||||
|
| **JA** | Jane Alesi | `/team/jane.html` | Standard |
|
||||||
|
| **JOA** | John Alesi | `/team/john.html` | Collision resolved (JA taken) |
|
||||||
|
| **JUA** | Justus Alesi | `/team/justus.html` | Collision resolved (JA/JOA taken) |
|
||||||
|
| **LA** | Lara Alesi | `/team/lara.html` | Standard |
|
||||||
|
| **LEA** | Lenna Alesi | `/team/lenna.html` | Collision resolved (LA taken) |
|
||||||
|
| **LEO** | Leon Alesi | `/team/leon.html` | Collision resolved (LA/LEA taken) |
|
||||||
|
| **LUA** | Luna Alesi | `/team/luna.html` | Collision resolved (LA/LEA/LEO taken) |
|
||||||
|
| **MA** | Marco Alesi | `/team/marco.html` | Standard |
|
||||||
|
| **OA** | Olu Alesi | `/team/olu.html` | Standard |
|
||||||
|
| **TA** | Theo Alesi | `/team/theo.html` | Standard |
|
||||||
|
| **WA** | Wolfgang Alesi | `/team/wolfgang.html` | Standard |
|
||||||
|
|
||||||
|
## Technical Implementation
|
||||||
|
|
||||||
|
### MkDocs Redirects Plugin
|
||||||
|
|
||||||
|
The redirects are implemented using the `mkdocs-redirects` plugin in `mkdocs.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
plugins:
|
||||||
|
- redirects:
|
||||||
|
redirect_maps:
|
||||||
|
# Examples
|
||||||
|
'ja.md': 'team/jane.md'
|
||||||
|
'ja/index.md': 'team/jane.md'
|
||||||
|
'joa.md': 'team/john.md'
|
||||||
|
'joa/index.md': 'team/john.md'
|
||||||
|
# ... (see mkdocs.yml for complete list)
|
||||||
|
```
|
||||||
|
|
||||||
|
### URL Patterns Supported
|
||||||
|
|
||||||
|
For each team member, the following URL patterns are supported:
|
||||||
|
|
||||||
|
1. **Direct**: `https://satware.ai/{kürzel}` → `https://satware.ai/team/{name}.html`
|
||||||
|
2. **Index**: `https://satware.ai/{kürzel}/` → `https://satware.ai/team/{name}.html`
|
||||||
|
3. **Explicit**: `https://satware.ai/{kürzel}/index.html` → `https://satware.ai/team/{name}.html`
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
- `https://satware.ai/ja` → `https://satware.ai/team/jane.html`
|
||||||
|
- `https://satware.ai/joa` → `https://satware.ai/team/john.html`
|
||||||
|
- `https://satware.ai/bea` → `https://satware.ai/team/bea.html`
|
||||||
|
|
||||||
|
## Fallback System
|
||||||
|
|
||||||
|
In addition to the mkdocs-redirects plugin, a fallback redirect page is created at `docs/ja.md` with:
|
||||||
|
|
||||||
|
1. **Meta refresh**: `<meta http-equiv="refresh" content="0; url=/team/jane.html">`
|
||||||
|
2. **JavaScript redirect**: `window.location.href = '/team/jane.html';`
|
||||||
|
3. **Manual link**: User-clickable link as final fallback
|
||||||
|
|
||||||
|
## Testing the Redirects
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
|
||||||
|
1. Start the development server:
|
||||||
|
```bash
|
||||||
|
./mkdocs.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Test redirect URLs:
|
||||||
|
```bash
|
||||||
|
curl -I http://localhost:8000/ja
|
||||||
|
curl -I http://localhost:8000/joa
|
||||||
|
curl -I http://localhost:8000/bea
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Verify redirect status codes (302 or 301) and target locations
|
||||||
|
|
||||||
|
### Production Testing
|
||||||
|
|
||||||
|
After deployment, test the live redirects:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I https://satware.ai/ja
|
||||||
|
curl -I https://satware.ai/joa
|
||||||
|
curl -I https://satware.ai/bea
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adding New Team Members
|
||||||
|
|
||||||
|
When adding new team members:
|
||||||
|
|
||||||
|
1. **Determine Kürzel**: Follow collision resolution rules
|
||||||
|
2. **Update mkdocs.yml**: Add redirect mappings
|
||||||
|
3. **Document**: Update this file with new abbreviation
|
||||||
|
4. **Test**: Verify redirects work in development and production
|
||||||
|
|
||||||
|
### New Member Example
|
||||||
|
|
||||||
|
For a new member "Max Weber":
|
||||||
|
1. **Initial**: MW
|
||||||
|
2. **Check collisions**: If MW exists, use MWE or MAW
|
||||||
|
3. **Add to mkdocs.yml**:
|
||||||
|
```yaml
|
||||||
|
'mw.md': 'team/max-weber.md'
|
||||||
|
'mw/index.md': 'team/max-weber.md'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
1. **404 Errors**: Verify target team page exists
|
||||||
|
2. **Redirect Loops**: Check for circular redirects in configuration
|
||||||
|
3. **Cache Issues**: Clear browser cache or test in private/incognito mode
|
||||||
|
4. **Case Sensitivity**: Ensure lowercase in redirect mappings
|
||||||
|
|
||||||
|
### Debug Steps
|
||||||
|
|
||||||
|
1. **Check Plugin Installation**: Verify `mkdocs-redirects` in Docker image
|
||||||
|
2. **Validate YAML**: Ensure proper YAML syntax in mkdocs.yml
|
||||||
|
3. **Build Locally**: Run `mkdocs build` to check for errors
|
||||||
|
4. **Check Generated Files**: Verify redirect HTML files in `site/` directory
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
- All redirect targets are internal to the satware.ai domain
|
||||||
|
- No external redirect capabilities to prevent abuse
|
||||||
|
- Redirect mappings are explicitly defined (no dynamic generation)
|
||||||
|
|
||||||
|
## Performance Impact
|
||||||
|
|
||||||
|
- Minimal impact on build time
|
||||||
|
- Redirect files are small HTML documents
|
||||||
|
- SEO-friendly with proper HTTP status codes
|
||||||
|
- Compatible with CDN caching
|
||||||
|
|
||||||
|
## future Enhancements
|
||||||
|
|
||||||
|
1. **API Integration**: Automatic abbreviation generation from HR systems
|
||||||
|
2. **Alternative Mappings**: Support multiple abbreviation formats
|
||||||
|
3. **Analytics**: Track redirect usage for optimization
|
||||||
|
4. **Dynamic Updates**: Automated updates when team changes occur
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: 2025-06-02
|
||||||
|
**Version**: 1.0
|
||||||
|
**Author**: Jane Alesi (JA)
|
||||||
|
**Status**: Production Ready
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
title: "Redirect to Jane Alesi"
|
||||||
|
description: "Automatic redirect to Jane Alesi's profile page"
|
||||||
|
hide:
|
||||||
|
- navigation
|
||||||
|
- toc
|
||||||
|
---
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// JavaScript redirect as primary method
|
||||||
|
window.location.href = '/team/jane.html';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<meta http-equiv="refresh" content="0; url=/team/jane.html">
|
||||||
|
|
||||||
|
# Weiterleitung zu Jane Alesi
|
||||||
|
|
||||||
|
Sie werden automatisch zu Jane Alesis Profilseite weitergeleitet...
|
||||||
|
|
||||||
|
Falls die automatische Weiterleitung nicht funktioniert, [klicken Sie hier um zu Jane Alesis Profilseite zu gelangen](/team/jane.html).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Jane Alesi** ist die führende KI-Architektin von satware AG und Ihre erste Anlaufstelle für alle Fragen rund um fortgeschrittene AGI-Systeme.
|
||||||
+58
-1
@@ -68,6 +68,64 @@ plugins:
|
|||||||
archive: true
|
archive: true
|
||||||
authors: true
|
authors: true
|
||||||
- search
|
- search
|
||||||
|
- redirects:
|
||||||
|
redirect_maps:
|
||||||
|
# satware AG Benutzerkürzel System - Team Member Redirects
|
||||||
|
# Format: kürzel.md → team/member.md
|
||||||
|
|
||||||
|
# A-Team
|
||||||
|
'aa.md': 'team/amira.md' # Amira Alesi
|
||||||
|
'aa/index.md': 'team/amira.md'
|
||||||
|
|
||||||
|
# B-Team
|
||||||
|
'ba.md': 'team/bastian.md' # Bastian Alesi
|
||||||
|
'ba/index.md': 'team/bastian.md'
|
||||||
|
'bea.md': 'team/bea.md' # Bea Alesi (collision resolved)
|
||||||
|
'bea/index.md': 'team/bea.md'
|
||||||
|
|
||||||
|
# D-Team
|
||||||
|
'da.md': 'team/denopus.md' # Denopus Alesi
|
||||||
|
'da/index.md': 'team/denopus.md'
|
||||||
|
|
||||||
|
# G-Team
|
||||||
|
'ga.md': 'team/gunta.md' # Gunta Alesi
|
||||||
|
'ga/index.md': 'team/gunta.md'
|
||||||
|
|
||||||
|
# J-Team
|
||||||
|
'ja.md': 'team/jane.md' # Jane Alesi
|
||||||
|
'ja/index.md': 'team/jane.md'
|
||||||
|
'jane.md': 'team/jane.md' # Alternative redirect
|
||||||
|
'joa.md': 'team/john.md' # John Alesi (collision resolved)
|
||||||
|
'joa/index.md': 'team/john.md'
|
||||||
|
'jua.md': 'team/justus.md' # Justus Alesi (collision resolved)
|
||||||
|
'jua/index.md': 'team/justus.md'
|
||||||
|
|
||||||
|
# L-Team
|
||||||
|
'la.md': 'team/lara.md' # Lara Alesi
|
||||||
|
'la/index.md': 'team/lara.md'
|
||||||
|
'lea.md': 'team/lenna.md' # Lenna Alesi (collision resolved)
|
||||||
|
'lea/index.md': 'team/lenna.md'
|
||||||
|
'leo.md': 'team/leon.md' # Leon Alesi (collision resolved)
|
||||||
|
'leo/index.md': 'team/leon.md'
|
||||||
|
'lua.md': 'team/luna.md' # Luna Alesi (collision resolved)
|
||||||
|
'lua/index.md': 'team/luna.md'
|
||||||
|
|
||||||
|
# M-Team
|
||||||
|
'ma.md': 'team/marco.md' # Marco Alesi
|
||||||
|
'ma/index.md': 'team/marco.md'
|
||||||
|
|
||||||
|
# O-Team
|
||||||
|
'oa.md': 'team/olu.md' # Olu Alesi
|
||||||
|
'oa/index.md': 'team/olu.md'
|
||||||
|
|
||||||
|
# T-Team
|
||||||
|
'ta.md': 'team/theo.md' # Theo Alesi
|
||||||
|
'ta/index.md': 'team/theo.md'
|
||||||
|
|
||||||
|
# W-Team
|
||||||
|
'wa.md': 'team/wolfgang.md' # Wolfgang Alesi
|
||||||
|
'wa/index.md': 'team/wolfgang.md'
|
||||||
|
|
||||||
- minify:
|
- minify:
|
||||||
minify_js: true
|
minify_js: true
|
||||||
minify_html: true
|
minify_html: true
|
||||||
@@ -206,4 +264,3 @@ nav:
|
|||||||
- Preise: zugang/index.md
|
- Preise: zugang/index.md
|
||||||
- FAQ: faq/index.md
|
- FAQ: faq/index.md
|
||||||
- Blog: blog/index.md
|
- Blog: blog/index.md
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user