diff --git a/README.es.md b/README.es.md index d376a0e..4be55a0 100644 --- a/README.es.md +++ b/README.es.md @@ -71,6 +71,9 @@ en vivo. Hace menos que Trello o Jira, y para nosotros esa era la idea. HTTP plano; se activa solo cuando la app se sirve por HTTPS. - **Tarjetas con todo**: comentarios, adjuntos con visor de imágenes en la app, etiquetas, prioridad, vencimiento y feed de actividad por tarjeta. +- **Puntos y recompensas**: completar una tarea da puntos. Karma semanal, + rachas y un catálogo de recompensas reales que definís vosotros. Si lo + ignoras, el tablero funciona exactamente igual. - **Multiusuario**: roles admin/usuario, idioma por usuario (ES/EN), contraseñas bcrypt, login con rate-limit y registro de auditoría. - **PWA instalable**: tema claro/oscuro siguiendo al sistema, service @@ -98,6 +101,14 @@ en vivo. Hace menos que Trello o Jira, y para nosotros esa era la idea. Página de ajustes con previews de tema, selector de color de acento, opciones de densidad, tarjeta de perfil, gestor de etiquetas y selector de idioma +**Puntos y recompensas:** karma semanal, rachas y premios que definís vosotros** + + + + + Panel de puntos y recompensas con el karma semanal de cada uno y su racha, un catálogo de recompensas para canjear y el historial de actividad + + ## Instalación Requisitos: Linux (x86_64 o arm64) con systemd, acceso root o sudo. diff --git a/README.md b/README.md index b5bb298..d366811 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,9 @@ Trello or Jira, and for us that was the point. plain HTTP; turns itself on once the app is served over HTTPS. - **Cards with everything**: comments, attachments with an in-app image viewer, labels, priority, due dates and a per-card activity feed. +- **Points and rewards**: completing a task earns points. A weekly karma + board, streaks and a catalog of real-life rewards you define yourselves. + Ignore it and the board works exactly the same. - **Multiuser**: admin/user roles, per-user language (ES/EN), bcrypt passwords, rate-limited login, audit trail. - **Installable PWA**: light/dark theme following the system, offline @@ -93,6 +96,14 @@ Trello or Jira, and for us that was the point. Settings page showing theme previews, accent color swatches, density options, profile card, label manager and language selector +**Points and rewards:** weekly karma, streaks and rewards you define** + + + + + Points and rewards panel showing each person's weekly karma with their streak, a catalog of redeemable rewards and a recent activity list + + ## Installation Requirements: Linux (x86_64 or arm64) with systemd, root or sudo access. diff --git a/assets/screenshot-rewards-en-dark.png b/assets/screenshot-rewards-en-dark.png new file mode 100644 index 0000000..8d3d1fd Binary files /dev/null and b/assets/screenshot-rewards-en-dark.png differ diff --git a/assets/screenshot-rewards-en-light.png b/assets/screenshot-rewards-en-light.png new file mode 100644 index 0000000..2bee171 Binary files /dev/null and b/assets/screenshot-rewards-en-light.png differ diff --git a/assets/screenshot-rewards-es-dark.png b/assets/screenshot-rewards-es-dark.png new file mode 100644 index 0000000..2ab73e1 Binary files /dev/null and b/assets/screenshot-rewards-es-dark.png differ diff --git a/assets/screenshot-rewards-es-light.png b/assets/screenshot-rewards-es-light.png new file mode 100644 index 0000000..a067212 Binary files /dev/null and b/assets/screenshot-rewards-es-light.png differ diff --git a/landing/app.js b/landing/app.js index 551cb41..0448612 100644 --- a/landing/app.js +++ b/landing/app.js @@ -34,7 +34,7 @@ function langNow() { return root.lang === 'en' ? 'en' : 'es'; } /* ---------- Capturas: principal + carrusel, por idioma/tema ---------- */ - const SHOT_ORDER = ['board', 'casa', 'viaje', 'trabajo', 'expenses', 'invite', 'settings']; + const SHOT_ORDER = ['board', 'casa', 'viaje', 'trabajo', 'expenses', 'rewards', 'invite', 'settings']; let shotIndex = 0; const mainImg = document.getElementById('shotMain'); const capEl = document.getElementById('shotCap'); diff --git a/landing/assets/shot-rewards-en-dark.webp b/landing/assets/shot-rewards-en-dark.webp new file mode 100644 index 0000000..f57ff79 Binary files /dev/null and b/landing/assets/shot-rewards-en-dark.webp differ diff --git a/landing/assets/shot-rewards-en-light.webp b/landing/assets/shot-rewards-en-light.webp new file mode 100644 index 0000000..495a825 Binary files /dev/null and b/landing/assets/shot-rewards-en-light.webp differ diff --git a/landing/assets/shot-rewards-es-dark.webp b/landing/assets/shot-rewards-es-dark.webp new file mode 100644 index 0000000..2776fc8 Binary files /dev/null and b/landing/assets/shot-rewards-es-dark.webp differ diff --git a/landing/assets/shot-rewards-es-light.webp b/landing/assets/shot-rewards-es-light.webp new file mode 100644 index 0000000..6c512cb Binary files /dev/null and b/landing/assets/shot-rewards-es-light.webp differ diff --git a/landing/i18n.js b/landing/i18n.js index 2d6546e..57c8a7e 100644 --- a/landing/i18n.js +++ b/landing/i18n.js @@ -22,6 +22,7 @@ 'shot.viaje.cap': 'El viaje a Lisboa, con fechas y responsables', 'shot.trabajo.cap': 'El tablero de Trabajo, para equipos pequeños', 'shot.expenses.cap': 'Gastos compartidos, con su reparto', + 'shot.rewards.cap': 'Puntos y recompensas: karma semanal, rachas y premios que canjear', 'shot.invite.cap': 'Invitar sin cuenta: enlace, tu parte y pago', 'shot.settings.cap': 'Ajustes: tema, acento, densidad y etiquetas' }); @@ -31,6 +32,7 @@ 'shot.viaje.alt': 'Tablero del viaje a Lisboa con la reserva del hotel, los trenes y una lista de restaurantes', 'shot.trabajo.alt': 'Tablero de Trabajo con la presentación del trimestre, una factura y un bug de login', 'shot.expenses.alt': 'Tablero de gastos con la compra del súper, una cena y la factura de la luz, con el reparto de pagos', + 'shot.rewards.alt': 'Panel de puntos y recompensas de Deltos: karma semanal de cada uno con su racha, catálogo de recompensas reales para canjear e historial de actividad', 'shot.invite.alt': 'Página pública de invitación de Deltos: saludo a la persona invitada, su parte del gasto y el botón de marcar como pagado', 'shot.settings.alt': 'Ajustes de Deltos: tema claro, oscuro o auto, color de acento, densidad y editor de etiquetas' }); @@ -76,16 +78,17 @@ "shot.viaje.cap": "The Lisbon trip, with dates and owners", "shot.trabajo.cap": "The Work board, for small teams", "shot.expenses.cap": "Shared expenses, with their splits", + "shot.rewards.cap": "Points and rewards: weekly karma, streaks and prizes to redeem", "shot.invite.cap": "Invite without an account: link, your share and payment", "shot.settings.cap": "Settings: theme, accent, density and labels", "shots.close": "Close", "feat.eyebrow": "What's in it", "feat.title": "Everything the board can do", - "feat.lede": "Twelve pieces that fit together, including the expense plugin. Not a single filler feature.", + "feat.lede": "Thirteen pieces that fit together, including the expense plugin. Not a single filler feature.", "f1.t": "Live sync", "f1.p": "Drag a card and everyone sees it instantly, no refresh. All over SSE.", "f2.t": "Phone alerts", "f2.p": "Web Push with the app closed: assigns and comments reach you.", "f3.t": "Cards with everything", "f3.p": "Comments, cropped attachments, priority, due dates and activity.", "f4.t": "Projects and labels", "f4.p": "Each project with its own board and labels to filter.", - "f5.t": "Each one in their language", "f5.p": "Roles, hashed passwords and rate-limited login.", + "f5.t": "Multiuser", "f5.p": "Admin and user roles, per-person language, bcrypt passwords and rate-limited login.", "f6.t": "Installable PWA", "f6.p": "Installable app, works offline, with light and dark theme.", "f7.t": "One-click demo", "f7.p": "Sign in password-free into a demo full of sample tasks.", "f8.t": "Your data, yours", "f8.p": "JSON export, automatic backups and an audit trail.", @@ -93,6 +96,7 @@ "f10.t": "Invite anyone", "f10.p": "One link: see their share, comment, mark as paid. No signup.", "f11.t": "Settle up", "f11.p": "One click and the app calculates who owes whom. Done.", "f12.t": "Drag your cards", "f12.p": "Hold and drag on mobile, or swipe the whole column.", + "f13.t": "Points and rewards", "f13.p": "Complete a task and earn points. Weekly karma, streaks and a catalog of real-life rewards you define yourselves.", "cmp.eyebrow": "Compare", "cmp.title": "The category that was missing: a light board for real life", "cmp.lede": "This is a comparison of task boards, not office suites. Data cross-checked against each project's public sources in August 2026.", @@ -157,6 +161,7 @@ "shot.viaje.alt": "Deltos Trip to Lisbon project board with hotel bookings, tickets and a restaurant list", "shot.trabajo.alt": "Deltos Work project board with the quarterly presentation, an invoice and a login bug", "shot.expenses.alt": "Deltos expenses board with the supermarket shopping, a dinner and the power bill, with payment splits", + "shot.rewards.alt": "Deltos points and rewards panel: each person's weekly karma with their streak, a catalog of real-life rewards to redeem and a recent activity history", "shot.invite.alt": "Deltos public invite page: greeting to the invited person, their share of the expense and the mark-as-paid button", "shot.settings.alt": "Deltos settings: light, dark or auto theme, accent color, density and label editor" }; diff --git a/landing/index.html b/landing/index.html index 4de14c1..53c040b 100644 --- a/landing/index.html +++ b/landing/index.html @@ -29,7 +29,7 @@ - + - + + diff --git a/landing/styles.194h.css b/landing/styles.249a.css similarity index 99% rename from landing/styles.194h.css rename to landing/styles.249a.css index 8699f11..1cc700e 100644 --- a/landing/styles.194h.css +++ b/landing/styles.249a.css @@ -358,6 +358,8 @@ h2{font-size:clamp(28px,4vw,42px);margin-bottom:16px} /* features */ .feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px} +/* Si la ultima tarjeta queda sola en la fila (13 = 4x3 + 1), centrarla. */ +.feat-grid>.feat:last-child:nth-child(3n+1){grid-column:2} .feat{ background:var(--card);border:1px solid var(--border);border-radius:var(--radius); padding:26px;transition:transform .25s,border-color .25s,box-shadow .25s; @@ -514,6 +516,7 @@ html.js .reveal.in{opacity:1;transform:none} .hero-grid{grid-template-columns:1fr;gap:56px} .hero-sub{max-width:640px} .feat-grid{grid-template-columns:repeat(2,1fr)} + .feat-grid>.feat:last-child:nth-child(3n+1){grid-column:auto} .install-grid{grid-template-columns:1fr} .about-wrap{grid-template-columns:1fr;padding:36px} .foot-grid{grid-template-columns:1fr 1fr} diff --git a/landing/styles.css b/landing/styles.css index 8699f11..1cc700e 100644 --- a/landing/styles.css +++ b/landing/styles.css @@ -358,6 +358,8 @@ h2{font-size:clamp(28px,4vw,42px);margin-bottom:16px} /* features */ .feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px} +/* Si la ultima tarjeta queda sola en la fila (13 = 4x3 + 1), centrarla. */ +.feat-grid>.feat:last-child:nth-child(3n+1){grid-column:2} .feat{ background:var(--card);border:1px solid var(--border);border-radius:var(--radius); padding:26px;transition:transform .25s,border-color .25s,box-shadow .25s; @@ -514,6 +516,7 @@ html.js .reveal.in{opacity:1;transform:none} .hero-grid{grid-template-columns:1fr;gap:56px} .hero-sub{max-width:640px} .feat-grid{grid-template-columns:repeat(2,1fr)} + .feat-grid>.feat:last-child:nth-child(3n+1){grid-column:auto} .install-grid{grid-template-columns:1fr} .about-wrap{grid-template-columns:1fr;padding:36px} .foot-grid{grid-template-columns:1fr 1fr}