Gograb Admin Footer Spec
Documentation for GoGrab Admin
Footer Component - Especificación Simple
Component: FooterComponent
Location: apps/gograb-admin/src/app/core/layout/footer.component.ts
Complexity: Minimal (40 líneas TS + 15 líneas HTML)
Propósito
Footer simple y limpio para gograb-admin MVP que proporciona información básica de copyright, versión de la aplicación y links útiles.
Especificación
Contenido del Footer
┌─────────────────────────────────────────────────────────────┐
│ │
│ © 2025 GoGrab Space · Version 1.0.0-mvp │
│ Made with ❤️ by GoGrab Team │
│ │
└─────────────────────────────────────────────────────────────┘
Información a Mostrar
- Copyright:
© 2025 GoGrab Space - Versión:
Version 1.0.0-mvp(desde package.json o hardcoded) - Credits:
Made with ❤️ by GoGrab Team - Links opcionales (si hay tiempo):
- Documentación
- Soporte
- GitHub
Implementación
TypeScript (40 líneas)
import { Component, inject } from '@angular/core';
import { CommonModule } from '@angular/common';
@Component({
selector: 'app-footer',
standalone: true,
imports: [CommonModule],
template: `
<footer class="app-footer">
<div class="footer-content">
<div class="footer-info">
<span class="copyright">© {{ currentYear }} GoGrab Space</span>
<span class="separator">·</span>
<span class="version">Version {{ version }}</span>
</div>
<div class="footer-credits">
Made with ❤️ by GoGrab Team
</div>
</div>
</footer>
`,
styles: [`
.app-footer {
background: #f8f9fa;
border-top: 1px solid #dee2e6;
padding: 1rem 2rem;
margin-top: auto;
text-align: center;
}
.footer-content {
max-width: 1200px;
margin: 0 auto;
font-size: 0.875rem;
color: #6c757d;
}
.footer-info {
margin-bottom: 0.5rem;
}
.separator {
margin: 0 0.5rem;
}
.footer-credits {
font-size: 0.8125rem;
color: #adb5bd;
}
`]
})
export class FooterComponent {
readonly currentYear = new Date().getFullYear();
readonly version = '1.0.0-mvp';
}
HTML Externo (15 líneas) - Alternativa si se prefiere separado
<!-- footer.component.html -->
<footer class="app-footer">
<div class="footer-content">
<div class="footer-info">
<span class="copyright">© {{ currentYear }} GoGrab Space</span>
<span class="separator">·</span>
<span class="version">Version {{ version }}</span>
</div>
<div class="footer-credits">
Made with ❤️ by GoGrab Team
</div>
</div>
</footer>
Integración en AppShell
// app-shell.component.ts
import { FooterComponent } from './footer.component';
@Component({
selector: 'app-shell',
standalone: true,
imports: [
CommonModule,
RouterOutlet,
HeaderComponent,
FooterComponent // ← Agregar import
],
template: `
<div class="app-shell">
<app-header />
<main class="main-content">
<router-outlet />
</main>
<app-footer /> <!-- ← Agregar footer -->
</div>
`,
styles: [`
.app-shell {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.main-content {
flex: 1;
padding: 2rem;
}
`]
})
export class AppShellComponent {}
Estilos Adicionales (SCSS)
Si se usa archivo SCSS separado:
// footer.component.scss
.app-footer {
background: #f8f9fa;
border-top: 1px solid #dee2e6;
padding: 1rem 2rem;
margin-top: auto;
text-align: center;
.footer-content {
max-width: 1200px;
margin: 0 auto;
font-size: 0.875rem;
color: #6c757d;
}
.footer-info {
margin-bottom: 0.5rem;
.separator {
margin: 0 0.5rem;
}
}
.footer-credits {
font-size: 0.8125rem;
color: #adb5bd;
}
}
// Responsive
@media (max-width: 768px) {
.app-footer {
padding: 1rem;
font-size: 0.8125rem;
.footer-info {
flex-direction: column;
.separator {
display: none;
}
}
}
}
Características
MVP Features
- ✅ Copyright con año dinámico
- ✅ Versión de la aplicación
- ✅ Credits del equipo
- ✅ Styling simple y limpio
- ✅ Responsive básico
Post-MVP (Opcional)
- ⏭️ Links a documentación
- ⏭️ Link a GitHub repo
- ⏭️ Link a soporte/contacto
- ⏭️ Social media links
- ⏭️ Selector de idioma
- ⏭️ Theme switcher
Testing Manual
# Day 3 - Después de implementar footer
# Test 1: Footer visible
- Navegar a /dashboard
- Verificar footer en bottom de página
- Verificar año actual se muestra correctamente
# Test 2: Contenido correcto
- Verificar copyright "© 2025 GoGrab Space"
- Verificar versión "Version 1.0.0-mvp"
- Verificar credits "Made with ❤️ by GoGrab Team"
# Test 3: Responsive
- Reducir viewport a mobile
- Verificar footer se adapta correctamente
- Texto sigue siendo legible
# Test 4: Styling
- Verificar border-top visible
- Verificar background color aplicado
- Verificar padding apropiado
Estimación
- Implementación: 20-30 minutos
- Styling: 15-20 minutos
- Integración: 10 minutos
- Testing: 10 minutos
Total: ~1 hora (parte de Day 3)
Notas de Implementación
- Inline template vs archivo separado: Para MVP, inline template es suficiente (más simple)
- Version number: Puede ser hardcoded
'1.0.0-mvp'o leer de environment - Año dinámico:
new Date().getFullYear()para actualización automática - Styling: Usar inline styles para simplicidad, o SCSS si se prefiere organización
- FlexBox: AppShell usa flex para push footer to bottom
Prioridad
Prioridad: Media-Alta (parte de MUST HAVE en layout básico) Day: 3 (junto con Header y Dashboard) Time slot: Final de Day 3 (después de Header y Dashboard)