feat(web): tane.comunes.org landing + localized app screenshots
- Hugo site (site/): EN/ES intro + legal (generated from docs/legal), an
ES/EN About page from docs/{que-es-tane,what-is-tane}.md, seed-green theme,
responsive header, store-badge placeholders, multi-stage Hugo->nginx image.
- Golden screenshot harness (test/screenshots/): en,es,fr,de,pt,ja + RTL demo,
real fonts via DejaVu Sans + FontManifest; skip-by-default tag so CI stays
green. collect_screenshots.sh feeds site/ and fastlane phoneScreenshots.
- Drop editorial notes from the public explainer.
4
site/.dockerignore
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
public/
|
||||
resources/
|
||||
.hugo_build.lock
|
||||
.git/
|
||||
3
site/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
public/
|
||||
resources/
|
||||
.hugo_build.lock
|
||||
13
site/Dockerfile
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Multi-stage: build the static site with Hugo, serve it with nginx.
|
||||
# Build context is site/ only — legal pages are pre-generated (build-legal.sh)
|
||||
# and committed, and screenshots are copied in by collect_screenshots.sh, so no
|
||||
# other part of the repo is needed at image-build time.
|
||||
FROM hugomods/hugo:exts-0.140.2 AS build
|
||||
WORKDIR /src
|
||||
COPY . .
|
||||
RUN hugo --minify --gc
|
||||
|
||||
FROM nginx:alpine
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
COPY --from=build /src/public /usr/share/nginx/html
|
||||
EXPOSE 80
|
||||
198
site/assets/css/main.css
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
:root {
|
||||
--green: #2f7d34;
|
||||
--green-dark: #22521e;
|
||||
--appbar: #3a8434;
|
||||
--canvas: #e7f1e0;
|
||||
--container: #d3e8c8;
|
||||
--on-container: #2f6d2a;
|
||||
--title: #1b2416;
|
||||
--muted: #5c6b52;
|
||||
--field: #f3f7ee;
|
||||
--outline: #c3cbb6;
|
||||
--white: #fff;
|
||||
--maxw: 1060px;
|
||||
--radius: 18px;
|
||||
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans", sans-serif;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
html { scroll-behavior: smooth; }
|
||||
body {
|
||||
margin: 0;
|
||||
color: var(--title);
|
||||
background: var(--canvas);
|
||||
line-height: 1.55;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
img { max-width: 100%; display: block; }
|
||||
a { color: var(--green); }
|
||||
|
||||
.skip-link {
|
||||
position: absolute;
|
||||
inset-inline-start: -999px;
|
||||
background: var(--green);
|
||||
color: #fff;
|
||||
padding: .6rem 1rem;
|
||||
border-radius: 0 0 8px 0;
|
||||
z-index: 10;
|
||||
}
|
||||
.skip-link:focus { inset-inline-start: 0; }
|
||||
|
||||
/* Header */
|
||||
.site-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: .4rem 1.2rem;
|
||||
padding: .7rem clamp(1rem, 4vw, 2rem);
|
||||
background: var(--appbar);
|
||||
color: #fff;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 5;
|
||||
}
|
||||
.brand {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: .55rem;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
font-weight: 700;
|
||||
font-size: 1.25rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.brand img { border-radius: 8px; }
|
||||
.site-nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
gap: .5rem 1.1rem;
|
||||
}
|
||||
.site-nav a { color: #fff; text-decoration: none; opacity: .95; white-space: nowrap; }
|
||||
.site-nav a:hover { text-decoration: underline; }
|
||||
.lang-switch { display: inline-flex; gap: .6rem; font-size: .92rem; white-space: nowrap; }
|
||||
.lang-switch .current { opacity: .7; }
|
||||
.lang-switch a.lang { color: #fff; }
|
||||
|
||||
/* Narrow phones: brand on its own row, nav wraps beneath it, left-aligned. */
|
||||
@media (max-width: 560px) {
|
||||
.site-header { gap: .5rem; }
|
||||
.brand { font-size: 1.15rem; }
|
||||
.site-nav { width: 100%; gap: .4rem 1rem; font-size: .95rem; }
|
||||
}
|
||||
|
||||
main { max-width: var(--maxw); margin: 0 auto; padding: 0 clamp(1rem, 4vw, 2rem); }
|
||||
|
||||
/* Hero */
|
||||
.hero {
|
||||
display: grid;
|
||||
grid-template-columns: 1.1fr .9fr;
|
||||
gap: clamp(1.5rem, 4vw, 3rem);
|
||||
align-items: center;
|
||||
padding: clamp(2rem, 6vw, 4rem) 0 2rem;
|
||||
}
|
||||
.hero h1 {
|
||||
font-size: clamp(2rem, 5vw, 3.1rem);
|
||||
line-height: 1.1;
|
||||
margin: 0 0 .6rem;
|
||||
color: var(--green-dark);
|
||||
}
|
||||
.hero .tagline { font-size: 1.25rem; font-weight: 600; color: var(--on-container); margin: 0 0 1rem; }
|
||||
.hero .lead { font-size: 1.05rem; margin: 0 0 1rem; }
|
||||
.hero-shot { display: flex; justify-content: center; }
|
||||
|
||||
/* Phone frame */
|
||||
.phone {
|
||||
background: #12261a;
|
||||
padding: 8px;
|
||||
border-radius: 28px;
|
||||
box-shadow: 0 18px 40px rgba(20, 50, 25, .22);
|
||||
width: 232px;
|
||||
max-width: 62vw;
|
||||
}
|
||||
.phone img { border-radius: 20px; }
|
||||
|
||||
/* Sections */
|
||||
section { margin: 2.5rem 0; }
|
||||
h2 { font-size: clamp(1.4rem, 3vw, 1.9rem); color: var(--green-dark); }
|
||||
|
||||
.pillars {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 1.2rem;
|
||||
}
|
||||
.pillar {
|
||||
background: var(--white);
|
||||
border: 1px solid var(--outline);
|
||||
border-radius: var(--radius);
|
||||
padding: 1.4rem;
|
||||
}
|
||||
.pillar-icon { font-size: 1.8rem; }
|
||||
.pillar h2 { font-size: 1.2rem; margin: .5rem 0; }
|
||||
.pillar p { margin: 0; color: #2c3826; }
|
||||
|
||||
.shots .shot-row {
|
||||
display: flex;
|
||||
gap: 1.2rem;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.shots h2 { text-align: center; }
|
||||
|
||||
.values {
|
||||
background: var(--container);
|
||||
border-radius: var(--radius);
|
||||
padding: 1.6rem clamp(1.2rem, 4vw, 2.2rem);
|
||||
}
|
||||
.values ul { margin: .5rem 0 0; padding-inline-start: 1.2rem; }
|
||||
.values li { margin: .45rem 0; }
|
||||
|
||||
.get-it { text-align: center; }
|
||||
.store-badges { margin-top: 1.2rem; }
|
||||
.coming-soon { color: var(--muted); font-style: italic; }
|
||||
.badge {
|
||||
display: inline-block;
|
||||
background: var(--green);
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
padding: .7rem 1.4rem;
|
||||
border-radius: 999px;
|
||||
margin: .3rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* Legal docs */
|
||||
.doc { padding: 2rem 0 3rem; max-width: 760px; }
|
||||
.doc h1 { color: var(--green-dark); }
|
||||
.doc-body h2 { font-size: 1.3rem; margin-top: 1.8rem; }
|
||||
.doc-body { font-size: 1.02rem; }
|
||||
.crumb { color: var(--muted); }
|
||||
.legal-index { list-style: none; padding: 0; }
|
||||
.legal-index li {
|
||||
padding: 1rem 1.2rem;
|
||||
background: var(--white);
|
||||
border: 1px solid var(--outline);
|
||||
border-radius: 12px;
|
||||
margin: .7rem 0;
|
||||
}
|
||||
.legal-index a { font-weight: 600; font-size: 1.1rem; text-decoration: none; }
|
||||
.legal-index .desc { display: block; color: var(--muted); font-size: .95rem; margin-top: .2rem; }
|
||||
|
||||
/* Footer */
|
||||
.site-footer {
|
||||
background: var(--green-dark);
|
||||
color: #dfeeda;
|
||||
margin-top: 3rem;
|
||||
}
|
||||
.foot-inner { max-width: var(--maxw); margin: 0 auto; padding: 2rem clamp(1rem, 4vw, 2rem); }
|
||||
.foot-legal { display: flex; flex-wrap: wrap; gap: 1rem; margin-bottom: 1rem; }
|
||||
.foot-legal a { color: #fff; }
|
||||
.foot-note { margin: .3rem 0; font-size: .92rem; }
|
||||
.site-footer a { color: #cfe7c3; }
|
||||
|
||||
@media (max-width: 820px) {
|
||||
.hero { grid-template-columns: 1fr; }
|
||||
.hero-shot { order: -1; }
|
||||
.pillars { grid-template-columns: 1fr; }
|
||||
}
|
||||
BIN
site/assets/img/logo.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
site/assets/screenshots/de/calendar.png
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
site/assets/screenshots/de/detail.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
site/assets/screenshots/de/home.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
site/assets/screenshots/de/inventory.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
site/assets/screenshots/de/market.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
site/assets/screenshots/en/calendar.png
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
site/assets/screenshots/en/detail.png
Normal file
|
After Width: | Height: | Size: 174 KiB |
BIN
site/assets/screenshots/en/home.png
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
site/assets/screenshots/en/inventory.png
Normal file
|
After Width: | Height: | Size: 163 KiB |
BIN
site/assets/screenshots/en/market.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
site/assets/screenshots/es/calendar.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
site/assets/screenshots/es/detail.png
Normal file
|
After Width: | Height: | Size: 184 KiB |
BIN
site/assets/screenshots/es/home.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
site/assets/screenshots/es/inventory.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
BIN
site/assets/screenshots/es/market.png
Normal file
|
After Width: | Height: | Size: 179 KiB |
BIN
site/assets/screenshots/fr/calendar.png
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
site/assets/screenshots/fr/detail.png
Normal file
|
After Width: | Height: | Size: 181 KiB |
BIN
site/assets/screenshots/fr/home.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
site/assets/screenshots/fr/inventory.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
site/assets/screenshots/fr/market.png
Normal file
|
After Width: | Height: | Size: 186 KiB |
BIN
site/assets/screenshots/ja/calendar.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
BIN
site/assets/screenshots/ja/detail.png
Normal file
|
After Width: | Height: | Size: 174 KiB |
BIN
site/assets/screenshots/ja/home.png
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
site/assets/screenshots/ja/inventory.png
Normal file
|
After Width: | Height: | Size: 163 KiB |
BIN
site/assets/screenshots/ja/market.png
Normal file
|
After Width: | Height: | Size: 175 KiB |
BIN
site/assets/screenshots/pt/calendar.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
site/assets/screenshots/pt/detail.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
site/assets/screenshots/pt/home.png
Normal file
|
After Width: | Height: | Size: 127 KiB |
BIN
site/assets/screenshots/pt/inventory.png
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
site/assets/screenshots/pt/market.png
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
site/assets/screenshots/rtl/inventory.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
71
site/build-legal.sh
Executable file
|
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/env bash
|
||||
# Generates the Hugo legal pages from docs/legal/ — the single source of truth.
|
||||
# Each doc's first "# Heading" becomes the page title (and is stripped from the
|
||||
# body so it isn't rendered twice). Run from site/ whenever the legal docs change:
|
||||
# ./build-legal.sh
|
||||
# The generated content/legal/<slug>.<lang>.md files are committed so the Docker
|
||||
# build only needs site/.
|
||||
set -euo pipefail
|
||||
|
||||
site_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
legal_src="$(cd "$site_dir/../docs/legal" && pwd)"
|
||||
out="$site_dir/content/legal"
|
||||
|
||||
# slug | English master | Spanish mirror | menu weight
|
||||
rows=(
|
||||
"privacy|privacy-policy.md|politica-de-privacidad.md|1"
|
||||
"terms|terms-of-use.md|condiciones-de-uso.md|2"
|
||||
"rules|community-rules.md|normas-de-la-comunidad.md|3"
|
||||
"seeds|seed-legality-notice.md|aviso-sobre-semillas.md|4"
|
||||
)
|
||||
|
||||
emit() { # <src-md> <out-md> <slug> <weight>
|
||||
local src="$1" dst="$2" slug="$3" weight="$4"
|
||||
# First "# ..." line -> title; everything after that line -> body. Strip a
|
||||
# leading "Tane — " so it doesn't collide with the site title suffix in <title>.
|
||||
local title
|
||||
title="$(sed -n 's/^# \(.*\)/\1/p' "$src" | head -n1 \
|
||||
| sed -E 's/^Tane[[:space:]]*(—|–|-)[[:space:]]*//')"
|
||||
{
|
||||
printf -- '---\n'
|
||||
printf 'title: "%s"\n' "${title//\"/\\\"}"
|
||||
printf 'slug: "%s"\n' "$slug"
|
||||
printf 'weight: %s\n' "$weight"
|
||||
printf 'translationKey: "legal-%s"\n' "$slug"
|
||||
printf -- '---\n\n'
|
||||
# Drop the first H1 line, keep the rest verbatim.
|
||||
awk 'NR==1 && /^# /{next} {print}' "$src"
|
||||
} > "$dst"
|
||||
echo " $(basename "$dst") <- $(basename "$src")"
|
||||
}
|
||||
|
||||
for row in "${rows[@]}"; do
|
||||
IFS='|' read -r slug en es weight <<<"$row"
|
||||
emit "$legal_src/$en" "$out/$slug.en.md" "$slug" "$weight"
|
||||
emit "$legal_src/es/$es" "$out/$slug.es.md" "$slug" "$weight"
|
||||
done
|
||||
|
||||
echo "Generated legal pages in $out"
|
||||
|
||||
# --- Plain-language "About" page, generated from the docs/ explainers ---------
|
||||
# Each page uses its own fixed title (not the doc's H1) and drops the first H1.
|
||||
docs_dir="$(cd "$site_dir/../docs" && pwd)"
|
||||
emit_about() { # <src-md> <out-md> <title> <description>
|
||||
local src="$1" dst="$2" title="$3" desc="$4"
|
||||
[[ -f "$src" ]] || return 0
|
||||
{
|
||||
printf -- '---\n'
|
||||
printf 'title: "%s"\n' "$title"
|
||||
printf 'slug: "about"\n'
|
||||
printf 'translationKey: "about"\n'
|
||||
printf 'description: "%s"\n' "$desc"
|
||||
printf -- '---\n\n'
|
||||
awk 'NR==1 && /^# /{next} {print}' "$src"
|
||||
} > "$dst"
|
||||
echo "Generated $(basename "$dst") <- $(basename "$src")"
|
||||
}
|
||||
|
||||
emit_about "$docs_dir/que-es-tane.md" "$site_dir/content/about.es.md" \
|
||||
"Qué es Tane" "Tane explicada para todos los públicos."
|
||||
emit_about "$docs_dir/what-is-tane.md" "$site_dir/content/about.en.md" \
|
||||
"What is Tane" "Tane explained for everyone."
|
||||
36
site/config.toml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
baseURL = "https://tane.comunes.org/"
|
||||
title = "Tane"
|
||||
defaultContentLanguage = "en"
|
||||
defaultContentLanguageInSubdir = false
|
||||
enableRobotsTXT = true
|
||||
enableGitInfo = false
|
||||
|
||||
# Static, no-JS marketing site. Kept intentionally light: one page + a small
|
||||
# legal section, English/Spanish. Screenshots come from the app's golden
|
||||
# harness (apps/app_seeds/test/screenshots), copied in by collect_screenshots.sh.
|
||||
|
||||
[params]
|
||||
email = "info@comunes.org"
|
||||
publisher = "Asociación Comunes"
|
||||
publisherURL = "https://comunes.org"
|
||||
license = "AGPL-3.0"
|
||||
# Store links are empty until the app is published; the badges partial renders
|
||||
# a link only when its URL is set here, so nothing broken shows before launch.
|
||||
playStoreURL = ""
|
||||
fdroidURL = ""
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
languageCode = "en"
|
||||
weight = 1
|
||||
[languages.es]
|
||||
languageName = "Español"
|
||||
languageCode = "es"
|
||||
weight = 2
|
||||
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = false
|
||||
|
||||
[minify]
|
||||
disableJSON = true
|
||||
34
site/content/_index.en.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
title: "Your seed bank in your pocket"
|
||||
description: "A local-first, decentralized app for keeping and sharing traditional seeds. Offline, encrypted, no account."
|
||||
hero:
|
||||
title: "Your seed bank in your pocket"
|
||||
tagline: "Keep and share traditional seeds — offline, encrypted, no account."
|
||||
lead: >
|
||||
Every traditional seed is a letter written by thousands of generations,
|
||||
passed from hand to hand. Tane helps people and seed-saver collectives keep
|
||||
a friendly inventory of their bank, decide what they offer, and share it
|
||||
locally — without a central intermediary that could control it, censor it,
|
||||
or be fined for it.
|
||||
pillars:
|
||||
- icon: "🌱"
|
||||
title: "Manage your bank"
|
||||
body: "Add a seed with just a photo and a name — no Latin required. Note the year, how much you have, where it came from, germination tests. Search, filter, snap now and name later."
|
||||
- icon: "🔒"
|
||||
title: "Yours, and only yours"
|
||||
body: "Works fully offline. No account, no server, no trackers. Everything is encrypted on your device. Keep an encrypted backup and a printed recovery sheet to restore your whole bank on a new device."
|
||||
- icon: "🤝"
|
||||
title: "Share, as it's always been done"
|
||||
body: "Mark what you have spare to give away, swap or sell. Someone nearby finds it and contacts you — no middleman. Print a catalog of what you share to take to a seed fair."
|
||||
values:
|
||||
title: "Why Tane is different"
|
||||
points:
|
||||
- "No center: no company can shut it down, censor it, or be fined for it."
|
||||
- "Anti-monopoly by design — sharing seeds multiplies the commons instead of depleting it."
|
||||
- "Spreads like a seed, person to person, with no server in the middle."
|
||||
- "Free software (AGPL-3.0). No ads, no commissions, no business model."
|
||||
---
|
||||
|
||||
Tane (種, "seed"; from *tanemaki* 種まき, "to sow seeds") is a local-first,
|
||||
decentralized app for keeping and sharing traditional seeds. It works with zero
|
||||
network — and connects you to a neighborly seed-sharing network when you want it.
|
||||
35
site/content/_index.es.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
title: "Tu banco de semillas en el bolsillo"
|
||||
description: "Una app local-first y descentralizada para guardar y compartir semillas tradicionales. Sin conexión, cifrada, sin cuenta."
|
||||
hero:
|
||||
title: "Tu banco de semillas en el bolsillo"
|
||||
tagline: "Guarda y comparte semillas tradicionales: sin conexión, cifrado, sin cuenta."
|
||||
lead: >
|
||||
Cada semilla tradicional es una carta escrita por miles de generaciones, que
|
||||
pasa de mano en mano. Tane ayuda a personas y colectivos de guardianas de
|
||||
semillas a llevar un inventario amable de su banco, decidir qué ofrecen y
|
||||
compartirlo localmente, sin un intermediario central que pueda controlarlo,
|
||||
censurarlo o ser multado por ello.
|
||||
pillars:
|
||||
- icon: "🌱"
|
||||
title: "Gestiona tu banco"
|
||||
body: "Añade una semilla con solo una foto y un nombre; sin latín. Anota el año, cuánta tienes, de dónde viene, pruebas de germinación. Busca, filtra, haz la foto ahora y ponle nombre después."
|
||||
- icon: "🔒"
|
||||
title: "Tuyo, y solo tuyo"
|
||||
body: "Funciona totalmente sin conexión. Sin cuenta, sin servidor, sin rastreadores. Todo va cifrado en tu dispositivo. Guarda una copia cifrada y una hoja de recuperación impresa para restaurar todo tu banco en un dispositivo nuevo."
|
||||
- icon: "🤝"
|
||||
title: "Compartir, como se ha hecho siempre"
|
||||
body: "Marca lo que te sobra para regalar, intercambiar o vender. Alguien cerca lo encuentra y te contacta, sin intermediarios. Imprime un catálogo de lo que compartes para llevar a una feria de semillas."
|
||||
values:
|
||||
title: "Por qué Tane es diferente"
|
||||
points:
|
||||
- "Sin centro: ninguna empresa puede apagarlo, censurarlo ni ser multada por ello."
|
||||
- "Anti-monopolio por diseño: compartir semillas multiplica el común en lugar de agotarlo."
|
||||
- "Se propaga como una semilla, de persona a persona, sin servidor en medio."
|
||||
- "Software libre (AGPL-3.0). Sin anuncios, sin comisiones, sin modelo de negocio."
|
||||
---
|
||||
|
||||
Tane (種, "semilla"; de *tanemaki* 種まき, "sembrar semillas") es una app
|
||||
local-first y descentralizada para guardar y compartir semillas tradicionales.
|
||||
Funciona sin ninguna red, y te conecta a una red vecinal de intercambio de
|
||||
semillas cuando tú quieras.
|
||||
78
site/content/about.en.md
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
---
|
||||
title: "What is Tane"
|
||||
slug: "about"
|
||||
translationKey: "about"
|
||||
description: "Tane explained for everyone."
|
||||
---
|
||||
|
||||
|
||||
**Tane** (種) means "seed" in Japanese; the full name, *tanemaki* (種まき), means "to sow / scatter seeds".
|
||||
|
||||
## In one sentence
|
||||
|
||||
A simple, free app to **keep your seeds and share them** with whoever you like. It works
|
||||
**without internet** and with no company in the middle.
|
||||
|
||||
## Why it's needed
|
||||
|
||||
Today a handful of companies control much of the world's seed. Many seeds are made so they
|
||||
won't serve again: they give one harvest, but their seeds don't germinate well, so you have
|
||||
to **buy them again every year**. Meanwhile the traditional varieties — grown and improved
|
||||
over thousands of years — are being lost, and with them the knowledge of how to grow them.
|
||||
|
||||
Sharing seeds is one of the oldest and most natural things there is, yet in some places it
|
||||
has become complicated or even fined (in France an association was penalised for handing out
|
||||
varieties that weren't on the official approved list). And the people who care for seeds
|
||||
still do it with notebooks and spreadsheets.
|
||||
|
||||
## What it does, made easy
|
||||
|
||||
- **Keep** — your seed inventory: what you have, from which year, how much, where it came
|
||||
from, under **the name you use** (no Latin required). The same whether you have four
|
||||
packets in a drawer or a group with hundreds of varieties.
|
||||
- **Share** — you say what you offer; someone nearby sees it and writes to you, to **give
|
||||
away, swap or sell** if you want. You close the deal yourself, directly. No company steps
|
||||
in or takes a commission.
|
||||
|
||||
## Why it's different
|
||||
|
||||
- **It's free and belongs to everyone.** It isn't owned by any company: anyone can use,
|
||||
copy, translate or improve it, free and forever. It's more a *recipe that gets shared*
|
||||
than a closed product — this is called **free software**. And whoever improves it is
|
||||
bound to share those improvements just as freely, so no one can "close" it later (that's
|
||||
**copyleft**).
|
||||
- **It works offline.** The basics run even out in the field with no signal.
|
||||
- **Your data is yours.** Your information is kept on **your own phone**, protected with a
|
||||
key, not on some company's computers. We don't sell it or upload it anywhere. No ads.
|
||||
- **No one can shut it down or control it.** There's no central computer that everything
|
||||
passes through: people communicate **directly with each other**, like passing seeds from
|
||||
hand to hand. So no one can censor it or charge you to use it (that's what being
|
||||
**decentralized** means).
|
||||
- **You trust by word of mouth.** You deal with people you know and with those vouched for
|
||||
by people you trust — the way it's always worked in a village or at a fair — without
|
||||
having to give your real name or phone number unless you want to.
|
||||
- **In many languages.** For anywhere in the world, not for a single country. Volunteers
|
||||
translate it.
|
||||
|
||||
## Who it's for
|
||||
|
||||
Seed groups and networks, gardens and collectives, growers… and anyone with a few packets
|
||||
put away. For all ages, from 10 to 80.
|
||||
|
||||
## The name
|
||||
|
||||
**Tane** means "seed" (種). It comes from *tanemaki* (種まき), "to sow seeds" in Japanese, a
|
||||
nod to old customs of mutual aid between neighbours (sharing the work, saving together).
|
||||
|
||||
## Where it stands and how to help
|
||||
|
||||
In its early days. You can help by trying it out in a real seed group, translating it,
|
||||
sharing what you know about the varieties, or coding. It has no price and never will: it's
|
||||
sustained by volunteers, by the communities themselves, and by public funding for projects
|
||||
of common interest.
|
||||
|
||||
---
|
||||
|
||||
> *The idea underneath: traditional seeds are a heritage of humankind — everyone's and no
|
||||
> one's. Against those who would privatise them, Tane aims to make it easy for you to keep
|
||||
> them, multiply them and keep them moving.*
|
||||
81
site/content/about.es.md
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
title: "Qué es Tane"
|
||||
slug: "about"
|
||||
translationKey: "about"
|
||||
description: "Tane explicada para todos los públicos."
|
||||
---
|
||||
|
||||
|
||||
**Tane** (種) es «semilla» en japonés; el nombre completo, *tanemaki* (種まき), es «sembrar / esparcir semillas».
|
||||
|
||||
## En una frase
|
||||
|
||||
Una app sencilla y gratuita para **guardar tus semillas y compartirlas** con quien
|
||||
quieras. Funciona **sin internet** y sin ninguna empresa de por medio.
|
||||
|
||||
## Por qué hace falta
|
||||
|
||||
Hoy unas pocas empresas controlan gran parte de las semillas del mundo. Muchas están
|
||||
hechas para no volver a servir: dan una cosecha, pero sus semillas no germinan bien, así
|
||||
que hay que **comprarlas otra vez cada año**. Mientras tanto, las variedades de toda la
|
||||
vida —cultivadas y mejoradas durante miles de años— se están perdiendo, y con ellas el
|
||||
saber cómo cultivarlas.
|
||||
|
||||
Compartir semillas es de lo más viejo y natural que hay, pero en algunos sitios se ha
|
||||
vuelto complicado o hasta se multa (en Francia sancionaron a una asociación por repartir
|
||||
variedades que no estaban en la lista oficial permitida). Y quien las cuida lo hace hoy
|
||||
con libretas y hojas de cálculo.
|
||||
|
||||
## Qué hace, y fácil
|
||||
|
||||
- **Guardar** — tu inventario de semillas: qué tienes, de qué año, cuánta, de dónde vino,
|
||||
con **el nombre que tú usas** (no hace falta saber latín). Igual para quien tiene cuatro
|
||||
sobres en un cajón que para un grupo con cientos de variedades.
|
||||
- **Compartir** — dices qué ofreces; alguien cerca lo ve y te escribe, para **regalar,
|
||||
intercambiar o vender** si quieres. El trato lo cierras tú, directamente. Ninguna empresa
|
||||
se mete ni se lleva comisión.
|
||||
|
||||
## Por qué es distinta
|
||||
|
||||
- **Es libre y de todos.** No es de ninguna empresa: cualquiera puede usarla, copiarla,
|
||||
traducirla o mejorarla, gratis y para siempre. Es más una *receta que se comparte* que un
|
||||
producto cerrado — a esto se le llama **software libre**. Y quien la mejore está obligado
|
||||
a compartir esas mejoras igual de libres, para que nadie pueda «cerrarla» después (eso es
|
||||
el **copyleft**).
|
||||
- **Funciona sin internet.** Lo básico va aunque estés en el campo sin cobertura.
|
||||
- **Tus datos son tuyos.** Tu información se guarda en **tu propio móvil**, protegida con una
|
||||
clave, no en los ordenadores de una empresa. No la vendemos ni la subimos a ningún sitio.
|
||||
Sin publicidad.
|
||||
- **Nadie la puede apagar ni controlar.** No hay un ordenador central por el que pase todo:
|
||||
las personas se comunican **directamente entre sí**, como quien se pasa unas semillas de
|
||||
mano en mano. Por eso nadie puede censurarla ni cobrarte por usarla (eso es que sea
|
||||
**descentralizada**).
|
||||
- **Te fías por el boca a boca.** Te relacionas con gente que conoces y con quien te
|
||||
recomienda gente de confianza —como siempre se ha hecho en un pueblo o en una feria— sin
|
||||
tener que dar tu nombre real ni tu teléfono si no quieres.
|
||||
- **En muchos idiomas.** Para cualquier lugar del mundo, no para un solo país. La traduce
|
||||
gente voluntaria.
|
||||
|
||||
## Para quién
|
||||
|
||||
Grupos y redes de semillas, huertos y colectivos, agricultores y agricultoras… y cualquier
|
||||
persona con unos sobres guardados. Para todas las edades, de 10 a 80.
|
||||
|
||||
## El nombre
|
||||
|
||||
**Tane** quiere decir «semilla» (種). Viene de *tanemaki* (種まき), «sembrar semillas» en
|
||||
japonés, un guiño a viejas costumbres de ayuda mutua entre vecinos (compartir el trabajo,
|
||||
ahorrar juntos).
|
||||
|
||||
## En qué punto está y cómo ayudar
|
||||
|
||||
En sus primeros pasos. Se puede ayudar probándola en un grupo de semillas de verdad,
|
||||
traduciéndola, aportando lo que sabes de las variedades, o programando. No tiene ni tendrá
|
||||
precio: se sostiene con gente voluntaria, con las propias comunidades y con ayudas públicas
|
||||
a proyectos de interés común.
|
||||
|
||||
---
|
||||
|
||||
> *Idea de fondo: las semillas de toda la vida son un patrimonio de la humanidad —de todos
|
||||
> y de nadie—. Frente a quien quiere privatizarlas, Tane busca ponértelo fácil para
|
||||
> guardarlas, multiplicarlas y hacerlas circular.*
|
||||
4
site/content/legal/_index.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: "Legal"
|
||||
description: "Tane's privacy policy, terms of use, community rules and seed-legality notice."
|
||||
---
|
||||
4
site/content/legal/_index.es.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: "Legal"
|
||||
description: "Política de privacidad, condiciones de uso, normas de la comunidad y aviso sobre semillas de Tane."
|
||||
---
|
||||
96
site/content/legal/privacy.en.md
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
---
|
||||
title: "Privacy Policy"
|
||||
slug: "privacy"
|
||||
weight: 1
|
||||
translationKey: "legal-privacy"
|
||||
---
|
||||
|
||||
|
||||
**Version 1.0 — 13 July 2026**
|
||||
|
||||
Tane is published by **Asociación Comunes** (Spain) — <https://comunes.org> —
|
||||
contact: <info@comunes.org>. Tane is free software (AGPL-3.0); its source code is
|
||||
public, so everything described here can be verified.
|
||||
|
||||
## The short version
|
||||
|
||||
- Tane works **without an account**. We don't know who you are.
|
||||
- Everything you record stays **on your device, encrypted**. We run no servers that
|
||||
receive it, and we have no way to read it.
|
||||
- Nothing leaves your device unless **you** choose to share it (an offer, a message,
|
||||
your profile). What you share travels through community-run servers we don't control.
|
||||
- **No analytics, no ads, no trackers.** Tane collects nothing about you.
|
||||
|
||||
## 1. No accounts, no collection by us
|
||||
|
||||
Tane does not ask for your name, email, or phone number. There is no registration and
|
||||
no central Tane server. Your identity in the app is a cryptographic key created on your
|
||||
device and stored in your device's secure keystore. Asociación Comunes does not collect,
|
||||
receive, or process your personal data through the app.
|
||||
|
||||
## 2. Data stored on your device
|
||||
|
||||
Your seed inventory (varieties, quantities, notes, photos), your messages, your
|
||||
contacts' vouches and ratings, and your keys are stored **only on your device**, in an
|
||||
encrypted database (SQLCipher). The encryption key lives in your device's system
|
||||
keystore. Backups you create are also encrypted; you choose where to keep them, and
|
||||
they never pass through us.
|
||||
|
||||
## 3. Data that leaves your device — only when you choose
|
||||
|
||||
Nothing is published automatically. Each of these happens only by your explicit action:
|
||||
|
||||
- **Offers.** When you offer seeds, the app publishes the offer's title, description,
|
||||
optional photo, optional price, and an **approximate area** (a zone of roughly 2–80 km,
|
||||
as you configure it — never your address or precise location). Offers are public.
|
||||
- **Profile.** If you fill it in, your chosen name, bio, and avatar are public.
|
||||
- **Messages.** Direct messages are **end-to-end encrypted**: only you and the person
|
||||
you write to can read them. The servers that carry them see only encrypted envelopes.
|
||||
- **Vouches and ratings.** If you vouch for or rate someone, that statement is public
|
||||
and signed by your key.
|
||||
- **Sync between your devices.** If you link a second device, your data travels between
|
||||
them encrypted so that only your devices can read it.
|
||||
|
||||
## 4. Where shared data goes: community relays
|
||||
|
||||
Tane's social features use open, community-run servers ("relays"). By default the app
|
||||
uses a small set that includes `relay.comunes.org` (operated by Asociación Comunes) and
|
||||
well-known public relays; you can change this list, or empty it to turn the network off
|
||||
entirely. Relays other than `relay.comunes.org` are **third-party infrastructure**:
|
||||
their operators decide their own retention and policies, and this policy does not cover
|
||||
them.
|
||||
|
||||
## 5. Deletion — an honest note
|
||||
|
||||
You can delete anything local instantly, and you can withdraw an offer at any time.
|
||||
When you withdraw or delete something you had published, the app asks the relays to
|
||||
delete it too. Relays we don't operate may keep copies despite that request, and public
|
||||
posts may have been copied elsewhere while they were visible. **Treat anything you
|
||||
publish as potentially permanent.** On `relay.comunes.org` we honour deletion requests.
|
||||
|
||||
## 6. Device permissions
|
||||
|
||||
- **Photos / camera** — only when you attach a picture to a variety, offer, or profile.
|
||||
- **Approximate location** (optional) — only if you use "set my area from where I am",
|
||||
to pick your coarse sharing zone. Tane never requests precise location.
|
||||
- **Notifications** (optional) — to tell you about new messages.
|
||||
|
||||
## 7. Your rights
|
||||
|
||||
Because your data lives on your device under your control, you exercise most rights
|
||||
yourself: read, correct, export, or delete everything from within the app. For data on
|
||||
`relay.comunes.org`, or any question about this policy, write to <info@comunes.org>.
|
||||
If you are in the EU, you also have the right to complain to your data protection
|
||||
authority (in Spain, the AEPD).
|
||||
|
||||
## 8. Children
|
||||
|
||||
The seed inventory can be used by anyone. The market and messaging features are not
|
||||
directed at children; by using them you confirm you are old enough to use social
|
||||
features under the laws of your country.
|
||||
|
||||
## 9. Changes
|
||||
|
||||
We will update this policy if Tane's behaviour changes, and note the changes in the
|
||||
app's release notes. The current version always lives at
|
||||
<https://tane.comunes.org/legal/privacy>, with history in the public repository.
|
||||
102
site/content/legal/privacy.es.md
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
---
|
||||
title: "Política de privacidad"
|
||||
slug: "privacy"
|
||||
weight: 1
|
||||
translationKey: "legal-privacy"
|
||||
---
|
||||
|
||||
|
||||
**Versión 1.0 — 13 de julio de 2026**
|
||||
|
||||
Tane está publicada por la **Asociación Comunes** (España) — <https://comunes.org> —
|
||||
contacto: <info@comunes.org>. Tane es software libre (AGPL-3.0); su código fuente es
|
||||
público, así que todo lo que se describe aquí puede verificarse.
|
||||
|
||||
## La versión corta
|
||||
|
||||
- Tane funciona **sin cuenta**. No sabemos quién eres.
|
||||
- Todo lo que registras se queda **en tu dispositivo, cifrado**. No tenemos servidores
|
||||
que lo reciban ni forma de leerlo.
|
||||
- Nada sale de tu dispositivo salvo que **tú** decidas compartirlo (una oferta, un
|
||||
mensaje, tu perfil). Lo que compartes viaja por servidores comunitarios que no
|
||||
controlamos.
|
||||
- **Sin analíticas, sin publicidad, sin rastreadores.** Tane no recoge nada sobre ti.
|
||||
|
||||
## 1. Sin cuentas, sin recogida por nuestra parte
|
||||
|
||||
Tane no pide tu nombre, correo ni teléfono. No hay registro ni servidor central de
|
||||
Tane. Tu identidad en la aplicación es una clave criptográfica creada en tu dispositivo
|
||||
y guardada en el almacén seguro del sistema. La Asociación Comunes no recoge, recibe ni
|
||||
trata tus datos personales a través de la aplicación.
|
||||
|
||||
## 2. Datos guardados en tu dispositivo
|
||||
|
||||
Tu inventario de semillas (variedades, cantidades, notas, fotos), tus mensajes, los
|
||||
avales y valoraciones de tus contactos y tus claves se guardan **solo en tu
|
||||
dispositivo**, en una base de datos cifrada (SQLCipher). La clave de cifrado vive en el
|
||||
almacén seguro del sistema. Las copias de seguridad que crees también van cifradas; tú
|
||||
eliges dónde guardarlas y nunca pasan por nosotros.
|
||||
|
||||
## 3. Datos que salen de tu dispositivo — solo cuando tú quieres
|
||||
|
||||
Nada se publica automáticamente. Cada una de estas cosas ocurre solo por tu acción
|
||||
explícita:
|
||||
|
||||
- **Ofertas.** Cuando ofreces semillas, la aplicación publica el título, la
|
||||
descripción, una foto opcional, un precio opcional y una **zona aproximada** (un área
|
||||
de entre 2 y 80 km, según la configures — nunca tu dirección ni tu ubicación
|
||||
precisa). Las ofertas son públicas.
|
||||
- **Perfil.** Si lo rellenas, el nombre que elijas, tu biografía y tu avatar son
|
||||
públicos.
|
||||
- **Mensajes.** Los mensajes directos van **cifrados de extremo a extremo**: solo tú y
|
||||
la persona a la que escribes podéis leerlos. Los servidores que los transportan solo
|
||||
ven sobres cifrados.
|
||||
- **Avales y valoraciones.** Si avalas o valoras a alguien, esa declaración es pública
|
||||
y va firmada con tu clave.
|
||||
- **Sincronización entre tus dispositivos.** Si enlazas un segundo dispositivo, tus
|
||||
datos viajan entre ellos cifrados de forma que solo tus dispositivos pueden leerlos.
|
||||
|
||||
## 4. A dónde van los datos compartidos: servidores comunitarios
|
||||
|
||||
Las funciones sociales de Tane usan servidores abiertos gestionados por comunidades
|
||||
("relés"). Por defecto la aplicación usa un pequeño conjunto que incluye
|
||||
`relay.comunes.org` (operado por la Asociación Comunes) y relés públicos conocidos;
|
||||
puedes cambiar esa lista, o vaciarla para desconectar la red por completo. Los relés
|
||||
distintos de `relay.comunes.org` son **infraestructura de terceros**: sus operadores
|
||||
deciden su propia retención y sus políticas, y esta política no los cubre.
|
||||
|
||||
## 5. Borrado — una nota honesta
|
||||
|
||||
Puedes borrar al instante todo lo local, y puedes retirar una oferta en cualquier
|
||||
momento. Cuando retiras o borras algo que habías publicado, la aplicación pide a los
|
||||
relés que también lo borren. Los relés que no operamos pueden conservar copias pese a
|
||||
esa petición, y lo publicado pudo copiarse a otros sitios mientras fue visible.
|
||||
**Trata todo lo que publiques como potencialmente permanente.** En `relay.comunes.org`
|
||||
atendemos las peticiones de borrado.
|
||||
|
||||
## 6. Permisos del dispositivo
|
||||
|
||||
- **Fotos / cámara** — solo cuando adjuntas una imagen a una variedad, oferta o perfil.
|
||||
- **Ubicación aproximada** (opcional) — solo si usas "fijar mi zona desde donde estoy",
|
||||
para elegir tu zona amplia de intercambio. Tane nunca pide la ubicación precisa.
|
||||
- **Notificaciones** (opcional) — para avisarte de mensajes nuevos.
|
||||
|
||||
## 7. Tus derechos
|
||||
|
||||
Como tus datos viven en tu dispositivo y bajo tu control, la mayoría de derechos los
|
||||
ejerces tú directamente: consultar, corregir, exportar o borrar todo desde la propia
|
||||
aplicación. Para los datos en `relay.comunes.org`, o cualquier duda sobre esta
|
||||
política, escribe a <info@comunes.org>. Si estás en la UE, también tienes derecho a
|
||||
reclamar ante tu autoridad de protección de datos (en España, la AEPD).
|
||||
|
||||
## 8. Menores
|
||||
|
||||
El inventario de semillas puede usarlo cualquiera. El mercado y la mensajería no están
|
||||
dirigidos a menores; al usarlos confirmas que tienes edad suficiente para usar
|
||||
funciones sociales según las leyes de tu país.
|
||||
|
||||
## 9. Cambios
|
||||
|
||||
Actualizaremos esta política si cambia el comportamiento de Tane, y lo señalaremos en
|
||||
las notas de cada versión. La versión vigente está siempre en
|
||||
<https://tane.comunes.org/legal/privacy>, con su historial en el repositorio público.
|
||||
47
site/content/legal/rules.en.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
title: "Community Rules"
|
||||
slug: "rules"
|
||||
weight: 3
|
||||
translationKey: "legal-rules"
|
||||
---
|
||||
|
||||
|
||||
**Version 1.0 — 13 July 2026**
|
||||
|
||||
The market and messages in Tane are shared spaces built on trust between neighbours.
|
||||
These rules are what everyone accepts before joining. They also define what counts as
|
||||
content that can be reported and removed from the servers we operate.
|
||||
|
||||
## The rules
|
||||
|
||||
1. **Be honest about your seeds.** Describe what you actually have: the variety as you
|
||||
know it, the harvest year, anything relevant about how it was grown. Don't invent
|
||||
provenance.
|
||||
2. **Share only what you may share.** Don't offer:
|
||||
- seed of **commercially protected varieties** (plant variety rights, patents)
|
||||
unless you are authorized;
|
||||
- **invasive or protected species** where their exchange is prohibited;
|
||||
- anything else that is illegal to share or sell where you or the recipient live.
|
||||
3. **Seeds, not anything else.** The market is for seeds and plant reproductive
|
||||
material in the spirit of the app. It is not a general classifieds board.
|
||||
4. **Respect people.** No harassment, threats, hate, or discrimination — in offers,
|
||||
profiles, ratings, or messages.
|
||||
5. **No spam or scams.** No repeated postings, misleading offers, phishing, or
|
||||
pressure to move people onto shady deals.
|
||||
6. **Honest reputation.** Vouch only for people you have actually met or exchanged
|
||||
with; rate only real experiences. Don't game the trust system.
|
||||
|
||||
## What happens if someone breaks them
|
||||
|
||||
- Anyone can **block** you — your offers and messages disappear for them.
|
||||
- Anyone can **report** an offer or a person. Reports travel to the servers that carry
|
||||
the content; on the relay operated by Comunes (`relay.comunes.org`), content and keys
|
||||
that break these rules are removed. Other servers apply their own policies.
|
||||
- There are no appeals or account suspensions because there are no accounts: the
|
||||
network simply stops carrying and showing what breaks the rules.
|
||||
|
||||
## A note on good faith
|
||||
|
||||
Most seed sharing is between amateurs, in small quantities, for the joy of keeping
|
||||
varieties alive. When in doubt, prefer **gifting and swapping** over selling, label
|
||||
things clearly, and ask. That's how it's always been done.
|
||||
54
site/content/legal/rules.es.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
title: "Normas de la comunidad"
|
||||
slug: "rules"
|
||||
weight: 3
|
||||
translationKey: "legal-rules"
|
||||
---
|
||||
|
||||
|
||||
**Versión 1.0 — 13 de julio de 2026**
|
||||
|
||||
El mercado y los mensajes de Tane son espacios compartidos construidos sobre la
|
||||
confianza entre vecinas y vecinos. Estas normas son lo que todo el mundo acepta antes
|
||||
de entrar. También definen qué contenido puede denunciarse y eliminarse de los
|
||||
servidores que operamos.
|
||||
|
||||
## Las normas
|
||||
|
||||
1. **Sé honesto con tus semillas.** Describe lo que realmente tienes: la variedad tal
|
||||
y como la conoces, el año de cosecha, lo relevante sobre cómo se cultivó. No
|
||||
inventes procedencias.
|
||||
2. **Comparte solo lo que puedas compartir.** No ofrezcas:
|
||||
- semilla de **variedades protegidas comercialmente** (obtenciones vegetales,
|
||||
patentes) salvo que tengas autorización;
|
||||
- **especies invasoras o protegidas** allí donde su intercambio esté prohibido;
|
||||
- cualquier otra cosa que sea ilegal compartir o vender donde vives tú o donde vive
|
||||
quien la recibe.
|
||||
3. **Semillas, no cualquier cosa.** El mercado es para semillas y material de
|
||||
reproducción vegetal, en el espíritu de la aplicación. No es un tablón de anuncios
|
||||
general.
|
||||
4. **Respeta a las personas.** Nada de acoso, amenazas, odio o discriminación — ni en
|
||||
ofertas, ni en perfiles, ni en valoraciones, ni en mensajes.
|
||||
5. **Sin spam ni engaños.** Nada de publicaciones repetidas, ofertas engañosas,
|
||||
phishing o presiones para llevar a la gente a tratos turbios.
|
||||
6. **Reputación honesta.** Avala solo a personas que conozcas de verdad o con las que
|
||||
hayas intercambiado; valora solo experiencias reales. No hagas trampas al sistema de
|
||||
confianza.
|
||||
|
||||
## Qué pasa si alguien las incumple
|
||||
|
||||
- Cualquiera puede **bloquearte** — tus ofertas y mensajes desaparecen para esa
|
||||
persona.
|
||||
- Cualquiera puede **denunciar** una oferta o a una persona. Las denuncias llegan a los
|
||||
servidores que transportan el contenido; en el relé operado por Comunes
|
||||
(`relay.comunes.org`), el contenido y las claves que incumplen estas normas se
|
||||
eliminan. Otros servidores aplican sus propias políticas.
|
||||
- No hay apelaciones ni suspensiones de cuenta porque no hay cuentas: sencillamente, la
|
||||
red deja de transportar y de mostrar lo que incumple las normas.
|
||||
|
||||
## Una nota sobre la buena fe
|
||||
|
||||
La mayor parte del intercambio de semillas ocurre entre aficionados, en pequeñas
|
||||
cantidades, por el gusto de mantener vivas las variedades. Ante la duda, prefiere
|
||||
**regalar e intercambiar** antes que vender, etiqueta las cosas con claridad y
|
||||
pregunta. Así se ha hecho siempre.
|
||||
66
site/content/legal/seeds.en.md
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
---
|
||||
title: "Notice on the Legality of Exchanging Seeds"
|
||||
slug: "seeds"
|
||||
weight: 4
|
||||
translationKey: "legal-seeds"
|
||||
---
|
||||
|
||||
|
||||
**Version 1.0 — 13 July 2026**
|
||||
|
||||
Tane helps people keep and share traditional seeds. Laws about seeds differ a lot
|
||||
between countries, and they distinguish sharply between **giving or swapping** seeds
|
||||
and **selling** them. This notice is general information, not legal advice; you are
|
||||
responsible for following the law where you live and where your seeds are going.
|
||||
|
||||
## Gifting and swapping between amateurs
|
||||
|
||||
Exchanging seeds **without commercial purpose** — gifts, swaps, seed libraries,
|
||||
conservation networks — is broadly recognized and lawful in most places:
|
||||
|
||||
- **European Union.** EU seed marketing law regulates *commercial marketing* of seed.
|
||||
Exchange in kind between individuals, and the work of conservation networks and gene
|
||||
banks, fall outside or are expressly exempted; the plant-reproductive-material reform
|
||||
underway (proposal COM(2023) 414) keeps exemptions for amateurs and conservation
|
||||
networks, provided the activity is not commercial.
|
||||
- **Spain.** Ley 30/2006 regulates the *commercial* seed trade; non-commercial exchange
|
||||
between amateurs and conservation-oriented exchange are recognized practice (art. 24).
|
||||
- **United States.** Following the 2016 amendment to the Recommended Uniform State Seed
|
||||
Law, most states exempt **non-commercial seed sharing** (seed libraries, swaps) from
|
||||
commercial labeling and testing requirements.
|
||||
|
||||
## Selling seeds
|
||||
|
||||
Selling is different. In the EU and many other jurisdictions, **marketing seed of
|
||||
varieties not registered in an official catalogue may be restricted or prohibited**,
|
||||
and quantities, labeling, or species may be regulated even for small sellers.
|
||||
Exemptions for conservation varieties and amateur quantities exist but vary. If you
|
||||
use Tane's option to ask a price, **check your national rules first** — the app cannot
|
||||
do this for you.
|
||||
|
||||
## Protected varieties
|
||||
|
||||
Varieties covered by **plant variety rights (PVR/PBR) or patents** may not be
|
||||
propagated or sold without the holder's authorization — this can apply even to seed
|
||||
you bought legally. Traditional and heirloom varieties are generally not protected,
|
||||
but modern commercial varieties usually are. When in doubt, don't offer it.
|
||||
|
||||
## Sending seeds across borders
|
||||
|
||||
Most countries restrict importing seeds: **phytosanitary certificates**, prohibited
|
||||
species lists, and quarantine rules commonly apply — even to small envelopes between
|
||||
individuals, and also **within** the EU for certain species (plant passport rules).
|
||||
Before mailing seeds to another country, check the rules of the destination country.
|
||||
The safest exchanges are local ones — which is what Tane is designed for.
|
||||
|
||||
## Invasive and protected species
|
||||
|
||||
Some species may not be exchanged at all in some regions, either because they are
|
||||
**invasive** there or because they are **protected**. Lists are regional; check yours.
|
||||
|
||||
---
|
||||
|
||||
*Tane takes no commission, mediates no transaction, and verifies no offer: exchanges
|
||||
are private dealings between the people involved (see the
|
||||
[Terms of use](terms-of-use.md)). This notice exists so those dealings are informed
|
||||
ones.*
|
||||
72
site/content/legal/seeds.es.md
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
---
|
||||
title: "Aviso sobre la legalidad del intercambio de semillas"
|
||||
slug: "seeds"
|
||||
weight: 4
|
||||
translationKey: "legal-seeds"
|
||||
---
|
||||
|
||||
|
||||
**Versión 1.0 — 13 de julio de 2026**
|
||||
|
||||
Tane ayuda a conservar y compartir semillas tradicionales. Las leyes sobre semillas
|
||||
varían mucho entre países, y distinguen con claridad entre **regalar o intercambiar**
|
||||
semillas y **venderlas**. Este aviso es información general, no asesoramiento jurídico;
|
||||
eres responsable de cumplir la ley allí donde vives y allí donde van tus semillas.
|
||||
|
||||
## Regalar e intercambiar entre aficionados
|
||||
|
||||
Intercambiar semillas **sin ánimo comercial** — regalos, trueques, bibliotecas de
|
||||
semillas, redes de conservación — está ampliamente reconocido y es legal en la mayoría
|
||||
de lugares:
|
||||
|
||||
- **Unión Europea.** La normativa de semillas de la UE regula la *comercialización* de
|
||||
semilla. El intercambio en especie entre particulares y la labor de las redes de
|
||||
conservación y bancos de germoplasma quedan fuera o están expresamente exentos; la
|
||||
reforma en curso del material de reproducción vegetal (propuesta COM(2023) 414)
|
||||
mantiene exenciones para aficionados y redes de conservación, siempre que la
|
||||
actividad no sea comercial.
|
||||
- **España.** La Ley 30/2006 regula el comercio de semillas; el intercambio no
|
||||
comercial entre aficionados y el intercambio con fines de conservación son práctica
|
||||
reconocida (art. 24).
|
||||
- **Estados Unidos.** Tras la enmienda de 2016 a la ley uniforme estatal de semillas
|
||||
(RUSSL), la mayoría de estados eximen el **intercambio no comercial** (bibliotecas de
|
||||
semillas, trueques) de los requisitos comerciales de etiquetado y análisis.
|
||||
|
||||
## Vender semillas
|
||||
|
||||
Vender es distinto. En la UE y en muchas otras jurisdicciones, **comercializar semilla
|
||||
de variedades no inscritas en un catálogo oficial puede estar restringido o
|
||||
prohibido**, y las cantidades, el etiquetado o las especies pueden estar regulados
|
||||
incluso para vendedores pequeños. Existen exenciones para variedades de conservación y
|
||||
cantidades de aficionado, pero varían. Si usas la opción de Tane de pedir un precio,
|
||||
**consulta antes tu normativa nacional** — la aplicación no puede hacerlo por ti.
|
||||
|
||||
## Variedades protegidas
|
||||
|
||||
Las variedades cubiertas por **títulos de obtención vegetal (PVR/PBR) o patentes** no
|
||||
pueden propagarse ni venderse sin autorización del titular — y esto puede aplicarse
|
||||
incluso a semilla comprada legalmente. Las variedades tradicionales y de herencia
|
||||
normalmente no están protegidas; las variedades comerciales modernas casi siempre sí.
|
||||
Ante la duda, no la ofrezcas.
|
||||
|
||||
## Enviar semillas entre países
|
||||
|
||||
La mayoría de países restringen la importación de semillas: **certificados
|
||||
fitosanitarios**, listas de especies prohibidas y normas de cuarentena se aplican con
|
||||
frecuencia — incluso a sobres pequeños entre particulares, y también **dentro** de la
|
||||
UE para ciertas especies (pasaporte fitosanitario). Antes de enviar semillas a otro
|
||||
país, consulta las normas del país de destino. Los intercambios más seguros son los
|
||||
locales — que es justo para lo que está pensada Tane.
|
||||
|
||||
## Especies invasoras y protegidas
|
||||
|
||||
Algunas especies no pueden intercambiarse en absoluto en ciertas regiones, bien porque
|
||||
allí son **invasoras**, bien porque están **protegidas**. Las listas son regionales;
|
||||
consulta la tuya.
|
||||
|
||||
---
|
||||
|
||||
*Tane no cobra comisiones, no media en transacciones y no verifica ofertas: los
|
||||
intercambios son tratos privados entre las personas implicadas (ver las
|
||||
[Condiciones de uso](condiciones-de-uso.md)). Este aviso existe para que esos tratos
|
||||
sean informados.*
|
||||
81
site/content/legal/terms.en.md
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
title: "Terms of Use"
|
||||
slug: "terms"
|
||||
weight: 2
|
||||
translationKey: "legal-terms"
|
||||
---
|
||||
|
||||
|
||||
**Version 1.0 — 13 July 2026**
|
||||
|
||||
These terms cover the use of the Tane application, published by **Asociación Comunes**
|
||||
(Spain) — <https://comunes.org>, contact <info@comunes.org>. By using Tane's sharing
|
||||
features (the market and messaging) you accept these terms and the
|
||||
[Community rules](community-rules.md).
|
||||
|
||||
## 1. What Tane is — and what it is not
|
||||
|
||||
Tane is a **personal tool**: a seed inventory that lives on your device, plus a way to
|
||||
discover people near you who share seeds. Tane is **not a marketplace operator, not a
|
||||
shop, and not a party to any exchange**:
|
||||
|
||||
- We host no listings — offers are published by you, under your own key, to
|
||||
community-run relays.
|
||||
- We take **no commission** and process no payments. Any exchange, gift, or sale is
|
||||
agreed and carried out directly between the people involved.
|
||||
- We do not verify seeds, users, or offers, and we cannot remove content from servers
|
||||
we do not operate.
|
||||
|
||||
## 2. Your responsibilities
|
||||
|
||||
You are solely responsible for:
|
||||
|
||||
- **What you offer and exchange.** Make sure you are allowed to share or sell the
|
||||
seeds you list. Rules differ by country — see the
|
||||
[Seed legality notice](seed-legality-notice.md). In particular, selling seed of
|
||||
varieties that are not registered may be restricted where you live, and propagating
|
||||
commercially protected varieties without authorization is illegal in most countries.
|
||||
- **Shipping.** Sending seeds across borders is often restricted (phytosanitary rules).
|
||||
Check before you mail anything abroad.
|
||||
- **What you publish.** Offers, your profile, vouches, and ratings are public and
|
||||
signed by you. Follow the [Community rules](community-rules.md).
|
||||
- **Your keys and backups.** There is no account recovery: if you lose your device and
|
||||
your recovery code, we cannot restore anything.
|
||||
|
||||
## 3. No warranties
|
||||
|
||||
Tane is provided **"as is"**, without warranty of any kind, as free software under the
|
||||
[AGPL-3.0 license](https://www.gnu.org/licenses/agpl-3.0.html). In particular, nobody —
|
||||
not Comunes, not the people you exchange with through the app — guarantees the
|
||||
**identity, purity, germination, health, or legality** of any seed exchanged. Growing
|
||||
information shown in the app (calendars, seed-saving tips, viability estimates) is
|
||||
general guidance, not professional advice.
|
||||
|
||||
## 4. Disputes between users
|
||||
|
||||
Exchanges are private dealings between the people involved. Comunes is not a mediator
|
||||
and accepts no liability for failed exchanges, quality disputes, or losses arising from
|
||||
them. The vouching and rating features exist so communities can build their own trust.
|
||||
|
||||
## 5. Moderation
|
||||
|
||||
There is no central moderation: your app filters what you see through the people you
|
||||
trust, and you can **block** anyone and **report** offers or people from within the
|
||||
app. Reports are shared with the servers involved; on the relay we operate
|
||||
(`relay.comunes.org`), content that breaks the community rules is removed. Relays run
|
||||
by others apply their own policies.
|
||||
|
||||
## 6. Liability
|
||||
|
||||
To the maximum extent permitted by law, Asociación Comunes' total liability arising
|
||||
from the app is limited to the amount you paid for it (Tane is gratis: zero). Nothing
|
||||
in these terms limits liability that cannot be limited by law, or your statutory rights
|
||||
as a consumer.
|
||||
|
||||
## 7. General
|
||||
|
||||
If a part of these terms is found invalid, the rest remains in force. These terms are
|
||||
governed by Spanish and EU law, without depriving you of protections of the law of
|
||||
your country of residence. We may update these terms; material changes will be noted in
|
||||
the app's release notes, and the current version always lives at
|
||||
<https://tane.comunes.org/legal/terms>.
|
||||
84
site/content/legal/terms.es.md
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
---
|
||||
title: "Condiciones de uso"
|
||||
slug: "terms"
|
||||
weight: 2
|
||||
translationKey: "legal-terms"
|
||||
---
|
||||
|
||||
|
||||
**Versión 1.0 — 13 de julio de 2026**
|
||||
|
||||
Estas condiciones regulan el uso de la aplicación Tane, publicada por la **Asociación
|
||||
Comunes** (España) — <https://comunes.org>, contacto <info@comunes.org>. Al usar las
|
||||
funciones de intercambio de Tane (el mercado y la mensajería) aceptas estas condiciones
|
||||
y las [Normas de la comunidad](normas-de-la-comunidad.md).
|
||||
|
||||
## 1. Qué es Tane — y qué no es
|
||||
|
||||
Tane es una **herramienta personal**: un inventario de semillas que vive en tu
|
||||
dispositivo, más una forma de descubrir personas cercanas que comparten semillas. Tane
|
||||
**no es un operador de mercado, ni una tienda, ni parte de ningún intercambio**:
|
||||
|
||||
- No alojamos anuncios — las ofertas las publicas tú, con tu propia clave, en relés
|
||||
gestionados por comunidades.
|
||||
- No cobramos **ninguna comisión** ni procesamos pagos. Todo intercambio, regalo o
|
||||
venta se acuerda y se realiza directamente entre las personas implicadas.
|
||||
- No verificamos semillas, personas ni ofertas, y no podemos eliminar contenido de
|
||||
servidores que no operamos.
|
||||
|
||||
## 2. Tus responsabilidades
|
||||
|
||||
Eres la única persona responsable de:
|
||||
|
||||
- **Lo que ofreces e intercambias.** Asegúrate de que puedes compartir o vender las
|
||||
semillas que publicas. Las normas cambian según el país — mira el
|
||||
[Aviso sobre semillas](aviso-sobre-semillas.md). En particular, vender semilla de
|
||||
variedades no registradas puede estar restringido donde vives, y propagar variedades
|
||||
protegidas comercialmente sin autorización es ilegal en la mayoría de países.
|
||||
- **Los envíos.** Enviar semillas entre países suele estar restringido (normas
|
||||
fitosanitarias). Infórmate antes de mandar nada al extranjero.
|
||||
- **Lo que publicas.** Las ofertas, tu perfil, los avales y las valoraciones son
|
||||
públicos y van firmados por ti. Sigue las
|
||||
[Normas de la comunidad](normas-de-la-comunidad.md).
|
||||
- **Tus claves y copias de seguridad.** No hay recuperación de cuenta: si pierdes tu
|
||||
dispositivo y tu código de recuperación, no podemos restaurar nada.
|
||||
|
||||
## 3. Sin garantías
|
||||
|
||||
Tane se ofrece **"tal cual"**, sin garantía de ningún tipo, como software libre bajo la
|
||||
[licencia AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html). En particular, nadie —
|
||||
ni Comunes, ni las personas con las que intercambias a través de la aplicación —
|
||||
garantiza la **identidad, pureza, germinación, sanidad o legalidad** de ninguna semilla
|
||||
intercambiada. La información de cultivo que muestra la aplicación (calendarios,
|
||||
consejos para extraer semilla, estimaciones de viabilidad) es orientación general, no
|
||||
asesoramiento profesional.
|
||||
|
||||
## 4. Conflictos entre personas usuarias
|
||||
|
||||
Los intercambios son tratos privados entre las personas implicadas. Comunes no actúa
|
||||
como mediadora y no acepta responsabilidad por intercambios fallidos, disputas de
|
||||
calidad o pérdidas derivadas de ellos. Los avales y las valoraciones existen para que
|
||||
cada comunidad construya su propia confianza.
|
||||
|
||||
## 5. Moderación
|
||||
|
||||
No hay moderación central: tu aplicación filtra lo que ves a través de la gente en la
|
||||
que confías, y puedes **bloquear** a cualquiera y **denunciar** ofertas o personas
|
||||
desde la propia aplicación. Las denuncias se comparten con los servidores implicados;
|
||||
en el relé que operamos (`relay.comunes.org`), el contenido que incumple las normas de
|
||||
la comunidad se elimina. Los relés de terceros aplican sus propias políticas.
|
||||
|
||||
## 6. Responsabilidad
|
||||
|
||||
En la máxima medida que permita la ley, la responsabilidad total de la Asociación
|
||||
Comunes derivada de la aplicación se limita a lo que pagaste por ella (Tane es
|
||||
gratuita: cero). Nada en estas condiciones limita la responsabilidad que no pueda
|
||||
limitarse por ley, ni tus derechos como consumidor.
|
||||
|
||||
## 7. General
|
||||
|
||||
Si una parte de estas condiciones resultara inválida, el resto sigue en vigor. Estas
|
||||
condiciones se rigen por el derecho español y de la UE, sin privarte de las
|
||||
protecciones de la ley de tu país de residencia. Podemos actualizar estas condiciones;
|
||||
los cambios relevantes se señalarán en las notas de versión de la aplicación, y la
|
||||
versión vigente está siempre en <https://tane.comunes.org/legal/terms>.
|
||||
35
site/i18n/en.toml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[skipToContent]
|
||||
other = "Skip to content"
|
||||
|
||||
[navAbout]
|
||||
other = "About"
|
||||
|
||||
[navLegal]
|
||||
other = "Legal"
|
||||
|
||||
[navHome]
|
||||
other = "Home"
|
||||
|
||||
[screenshotsTitle]
|
||||
other = "A look inside"
|
||||
|
||||
[getItTitle]
|
||||
other = "Get Tane"
|
||||
|
||||
[getItComingSoon]
|
||||
other = "Publishing to app stores soon. Meanwhile, Tane is free software you can build and run today."
|
||||
|
||||
[legalIntro]
|
||||
other = "The plain-language documents that govern Tane. Short version: your data stays on your device, Tane is only a tool, and you are responsible for the seeds you share."
|
||||
|
||||
[footerFreeSoftware]
|
||||
other = "Free software (AGPL-3.0). No ads, no commissions, no data selling."
|
||||
|
||||
[footerPublishedBy]
|
||||
other = "Published by"
|
||||
|
||||
[footerContact]
|
||||
other = "Contact"
|
||||
|
||||
[backToHome]
|
||||
other = "Back to home"
|
||||
35
site/i18n/es.toml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[skipToContent]
|
||||
other = "Saltar al contenido"
|
||||
|
||||
[navAbout]
|
||||
other = "Qué es Tane"
|
||||
|
||||
[navLegal]
|
||||
other = "Legal"
|
||||
|
||||
[navHome]
|
||||
other = "Inicio"
|
||||
|
||||
[screenshotsTitle]
|
||||
other = "Un vistazo por dentro"
|
||||
|
||||
[getItTitle]
|
||||
other = "Consigue Tane"
|
||||
|
||||
[getItComingSoon]
|
||||
other = "Pronto en las tiendas de aplicaciones. Mientras tanto, Tane es software libre que puedes compilar y usar hoy."
|
||||
|
||||
[legalIntro]
|
||||
other = "Los documentos, en lenguaje claro, que rigen Tane. En resumen: tus datos se quedan en tu dispositivo, Tane es solo una herramienta, y tú eres responsable de las semillas que compartes."
|
||||
|
||||
[footerFreeSoftware]
|
||||
other = "Software libre (AGPL-3.0). Sin anuncios, sin comisiones, sin venta de datos."
|
||||
|
||||
[footerPublishedBy]
|
||||
other = "Publicado por"
|
||||
|
||||
[footerContact]
|
||||
other = "Contacto"
|
||||
|
||||
[backToHome]
|
||||
other = "Volver al inicio"
|
||||
7
site/layouts/404.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{{ define "main" }}
|
||||
<section class="doc">
|
||||
<h1>404</h1>
|
||||
<p class="lead">This page could not be found.</p>
|
||||
<p class="crumb"><a href="{{ "/" | relLangURL }}">← {{ T "backToHome" }}</a></p>
|
||||
</section>
|
||||
{{ end }}
|
||||
14
site/layouts/_default/baseof.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<!doctype html>
|
||||
<html lang="{{ .Site.Language.LanguageCode }}" dir="{{ or .Site.Language.LanguageDirection "ltr" }}">
|
||||
<head>
|
||||
{{ partial "head.html" . }}
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip-link" href="#main">{{ T "skipToContent" }}</a>
|
||||
{{ partial "header.html" . }}
|
||||
<main id="main">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
{{ partial "footer.html" . }}
|
||||
</body>
|
||||
</html>
|
||||
15
site/layouts/_default/list.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{{ define "main" }}
|
||||
<section class="doc doc-list">
|
||||
<h1>{{ .Title }}</h1>
|
||||
<p class="lead">{{ T "legalIntro" }}</p>
|
||||
<ul class="legal-index">
|
||||
{{ range .Pages.ByWeight }}
|
||||
<li>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
{{ with .Description }}<span class="desc">{{ . }}</span>{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
<p class="crumb"><a href="{{ "/" | relLangURL }}">← {{ T "backToHome" }}</a></p>
|
||||
</section>
|
||||
{{ end }}
|
||||
10
site/layouts/_default/single.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{{ define "main" }}
|
||||
<article class="doc">
|
||||
{{ if eq .Section "legal" }}<p class="crumb"><a href="{{ "/legal/" | relLangURL }}">{{ T "navLegal" }}</a></p>{{ end }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
<div class="doc-body">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<p class="crumb"><a href="{{ "/" | relLangURL }}">← {{ T "backToHome" }}</a></p>
|
||||
</article>
|
||||
{{ end }}
|
||||
53
site/layouts/index.html
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
{{ define "main" }}
|
||||
{{ $lang := .Site.Language.Lang }}
|
||||
<section class="hero">
|
||||
<div class="hero-copy">
|
||||
<h1>{{ .Params.hero.title }}</h1>
|
||||
<p class="tagline">{{ .Params.hero.tagline }}</p>
|
||||
<p class="lead">{{ .Params.hero.lead }}</p>
|
||||
{{ .Content }}
|
||||
{{ partial "store-badges.html" . }}
|
||||
</div>
|
||||
{{ $shot := resources.Get (printf "screenshots/%s/inventory.png" $lang) }}
|
||||
{{ with $shot }}
|
||||
<div class="hero-shot">
|
||||
<div class="phone"><img src="{{ .RelPermalink }}" alt="Tane inventory" loading="eager" /></div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</section>
|
||||
|
||||
<section class="pillars">
|
||||
{{ range .Params.pillars }}
|
||||
<article class="pillar">
|
||||
<div class="pillar-icon" aria-hidden="true">{{ .icon }}</div>
|
||||
<h2>{{ .title }}</h2>
|
||||
<p>{{ .body }}</p>
|
||||
</article>
|
||||
{{ end }}
|
||||
</section>
|
||||
|
||||
{{ $screens := slice "home" "inventory" "market" "calendar" "detail" }}
|
||||
<section class="shots">
|
||||
<h2>{{ T "screenshotsTitle" }}</h2>
|
||||
<div class="shot-row">
|
||||
{{ range $s := $screens }}
|
||||
{{ $img := resources.Get (printf "screenshots/%s/%s.png" $lang $s) }}
|
||||
{{ with $img }}
|
||||
<div class="phone"><img src="{{ .RelPermalink }}" alt="Tane {{ $s }}" loading="lazy" /></div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="values">
|
||||
<h2>{{ .Params.values.title }}</h2>
|
||||
<ul>
|
||||
{{ range .Params.values.points }}<li>{{ . }}</li>{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="get-it" id="get">
|
||||
<h2>{{ T "getItTitle" }}</h2>
|
||||
{{ partial "store-badges.html" . }}
|
||||
</section>
|
||||
{{ end }}
|
||||
16
site/layouts/partials/footer.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<footer class="site-footer">
|
||||
<div class="foot-inner">
|
||||
<nav class="foot-legal">
|
||||
{{ range (where .Site.Pages "Section" "legal") }}
|
||||
{{ if .IsPage }}<a href="{{ .RelPermalink }}">{{ .Title }}</a>{{ end }}
|
||||
{{ end }}
|
||||
</nav>
|
||||
<p class="foot-note">{{ T "footerFreeSoftware" }}</p>
|
||||
<p class="foot-note">
|
||||
{{ T "footerPublishedBy" }}
|
||||
<a href="{{ .Site.Params.publisherURL }}">{{ .Site.Params.publisher }}</a>
|
||||
· {{ T "footerContact" }}:
|
||||
<a href="mailto:{{ .Site.Params.email }}">{{ .Site.Params.email }}</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
16
site/layouts/partials/head.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{{ .Title }} · {{ .Site.Title }}</title>
|
||||
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ .Site.Params.description }}{{ end }}" />
|
||||
<meta name="theme-color" content="#2F7D34" />
|
||||
<link rel="icon" href="/favicon.png" type="image/png" />
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||||
{{ range .AllTranslations }}
|
||||
<link rel="alternate" hreflang="{{ .Language.LanguageCode }}" href="{{ .Permalink }}" />
|
||||
{{ end }}
|
||||
<meta property="og:title" content="{{ .Title }}" />
|
||||
<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{ .Site.Params.description }}{{ end }}" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/apple-touch-icon.png" />
|
||||
{{ $css := resources.Get "css/main.css" | minify | fingerprint }}
|
||||
<style>{{ $css.Content | safeCSS }}</style>
|
||||
11
site/layouts/partials/header.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<header class="site-header">
|
||||
<a class="brand" href="{{ "/" | relLangURL }}">
|
||||
<img src="/logo.png" alt="Tane" width="36" height="36" />
|
||||
<span>Tane</span>
|
||||
</a>
|
||||
<nav class="site-nav">
|
||||
{{ with .Site.GetPage "/about" }}<a href="{{ .RelPermalink }}">{{ T "navAbout" }}</a>{{ end }}
|
||||
<a href="{{ "/legal/" | relLangURL }}">{{ T "navLegal" }}</a>
|
||||
{{ partial "lang-switch.html" . }}
|
||||
</nav>
|
||||
</header>
|
||||
16
site/layouts/partials/lang-switch.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{{- /* Links to this page in the other language; falls back to that language's home. */ -}}
|
||||
<span class="lang-switch">
|
||||
{{- range .Site.Languages -}}
|
||||
{{- $lang := . -}}
|
||||
{{- if eq $lang.Lang $.Site.Language.Lang -}}
|
||||
<span class="lang current" aria-current="true">{{ $lang.LanguageName }}</span>
|
||||
{{- else -}}
|
||||
{{- $target := "" -}}
|
||||
{{- range $.AllTranslations -}}
|
||||
{{- if eq .Language.Lang $lang.Lang -}}{{- $target = .RelPermalink -}}{{- end -}}
|
||||
{{- end -}}
|
||||
{{- if not $target -}}{{- $target = ($lang.Lang | printf "/%s/" | relURL) -}}{{- end -}}
|
||||
<a class="lang" href="{{ $target }}" lang="{{ $lang.LanguageCode }}">{{ $lang.LanguageName }}</a>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</span>
|
||||
12
site/layouts/partials/store-badges.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{{- /* Renders store links only when configured, so nothing broken shows pre-launch. */ -}}
|
||||
<div class="store-badges">
|
||||
{{- with .Site.Params.playStoreURL -}}
|
||||
<a class="badge" href="{{ . }}">Google Play</a>
|
||||
{{- end -}}
|
||||
{{- with .Site.Params.fdroidURL -}}
|
||||
<a class="badge" href="{{ . }}">F-Droid</a>
|
||||
{{- end -}}
|
||||
{{- if and (not .Site.Params.playStoreURL) (not .Site.Params.fdroidURL) -}}
|
||||
<p class="coming-soon">{{ T "getItComingSoon" }}</p>
|
||||
{{- end -}}
|
||||
</div>
|
||||
23
site/nginx.conf
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# Hugo emits directory-style URLs (/legal/privacy/index.html).
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
# Long-cache fingerprinted assets and images; the HTML stays fresh.
|
||||
location ~* \.(png|jpg|jpeg|svg|webp|woff2?|css|js)$ {
|
||||
expires 7d;
|
||||
add_header Cache-Control "public";
|
||||
}
|
||||
|
||||
error_page 404 /404.html;
|
||||
|
||||
gzip on;
|
||||
gzip_types text/css application/javascript image/svg+xml application/xml;
|
||||
gzip_min_length 512;
|
||||
}
|
||||
BIN
site/static/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
site/static/favicon.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
site/static/logo.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
4
site/static/robots.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://tane.comunes.org/sitemap.xml
|
||||