BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Agenda do atleta Paraty Brazil by UTMB — deploy em app.byutmb.com.br
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Agenda do atleta, Paraty Brazil by UTMB App da programação do evento, feito para o atleta abrir no celular, instalar na tela inicial e consultar mesmo sem internet. Todo o conteúdo vem de uma planilha do Google que você edita. O app pega as mudanças sozinho, sem precisar republicar nada. O básico: como eu mudo o conteúdo Você edita a planilha. Só isso. 1. Abra a planilha do Google. 2. Mude o que quiser: horário, título, local, palestrante, o que for. 3. Espere alguns minutos. 4. O atleta puxa a tela para baixo no app, ou fecha e abre de novo, e já vê a versão nova.查看完整 README ↗
App da programação do evento, feito para o atleta abrir no celular, instalar na tela inicial e consultar mesmo sem internet.
Todo o conteúdo vem de uma planilha do Google que você edita. O app pega as mudanças sozinho, sem precisar republicar nada.
Você edita a planilha. Só isso.
Não precisa mexer em código. Não precisa avisar ninguém. Não precisa republicar o app.
Sobre a demora de alguns minutos: o Google guarda uma cópia da planilha publicada e leva de 2 a 5 minutos para atualizar essa cópia. Para uma agenda de evento isso é aceitável, mas vale lembrar disso na hora de uma mudança de última hora. Se precisar de algo instantâneo, avise pelos canais do evento em paralelo.
O conteúdo está em duas planilhas do Google, as duas no seu Drive e já publicadas:
| planilha | o que tem | link para editar |
|---|---|---|
| Programacao v2 | a agenda, uma linha por item | abrir |
| Beneficios | descontos na Expo e na cidade | abrir |
| Config | links do guia, do mapa, contatos | abrir |
São três arquivos separados em vez de abas de um só. Para o app dá no mesmo, e para você fica mais difícil mexer sem querer na Config enquanto edita a agenda.
Os itens do Palco Expo não ficam na Programação v2. O app lê direto a aba base da planilha de agenda do palco, a cada 5 minutos com o app aberto ou ao puxar a tela para baixo.
confirmado, Dia alocado (Quinta, Sexta, 18/09) e Horário alocado (15h45 - 16h00 (15 min)).src/data/palco.ts.Existe no Drive uma planilha chamada ZZ Paraty Agenda 2026 Programacao (antiga). Ela não alimenta mais o app e pode ser apagada.
Se um dia precisar recriar do zero, a pasta planilha/ deste repositório tem o modelo Paraty-Agenda.xlsx com os cabeçalhos certos e exemplos preenchidos.
Uma linha por item da agenda. As colunas de texto existem em três idiomas.
| coluna | o que é | exemplo |
|---|---|---|
id | um código único, qualquer um, só não pode repetir | q17-001 |
data | a data no formato ano-mês-dia | 2026-09-17 |
dia_semana | o dia por extenso, em português | quinta-feira |
hora_inicio | hora e minuto | 10:00 |
hora_fim | opcional, pode deixar vazio | 10:45 |
data_fim | só para item que vira a noite, no formato ano-mês-dia | 2026-09-19 |
pilar | oficial, talks, ativacao ou filmes | talks |
titulo_pt titulo_es titulo_en | o título nos três idiomas | Nutrição no ultra |
descricao_pt descricao_es descricao_en | opcional | |
local_pt local_es local_en | onde acontece | Palco Expo |
palestrante | opcional, não traduz | Ana Souza |
marca | opcional, não traduz | The North Face |
logo_url | opcional, link direto da imagem da logo | https://... |
inscricao | livre, previa ou invite | previa |
link_inscricao | opcional. Com previa e sem link, o app mostra a etiqueta de inscrição sem botão, para inscrição feita no estande | https://... |
destaque | escreva para fixar o item no topo do dia |
Regra de idioma: se você deixar titulo_es vazio, o app mostra o titulo_pt no lugar. Vale para todos os campos traduzíveis. Então dá para publicar só em português e ir traduzindo aos poucos.
Se você errar alguma coisa, o app não quebra. Uma linha sem id, sem data válida ou sem título em português é simplesmente ignorada, e o resto da agenda aparece normalmente. Um pilar que não existe vira oficial. Uma inscricao marcada como previa sem link vira entrada livre.
Duas colunas: chave e valor. Não mude os nomes das chaves.
| chave | o que é |
|---|---|
evento_nome | aparece no topo do app |
evento_datas | aparece embaixo do nome |
guia_atleta_url_pt | link do PDF do Guia do Atleta em português |
guia_atleta_url_es | link em espanhol. Se deixar vazio, usa o português |
guia_atleta_url_en | link em inglês. Se deixar vazio, usa o português |
mapa_expo_url | link da imagem da planta da Expo |
contato_whatsapp | link do tipo https://wa.me/55... |
contato_email | email de contato |
site_oficial | site do evento |
faq_url | página de perguntas frequentes |
ao_vivo_url | acompanhamento ao vivo da prova |
local_maps | link do Google Maps do local |
regua_patrocinadores_url | link da imagem da régua de patrocinadores |
Uma linha por estabelecimento. É a lista de descontos que aparece na aba Benefícios.
| coluna | o que é | exemplo |
|---|---|---|
id | um código único | b-001 |
onde | expo ou cidade | expo |
categoria | alimentacao, equipamentos, hospedagem, servicos ou experiencias | alimentacao |
nome | nome do estabelecimento, não traduz | Banana da Terra |
desconto_pt desconto_es desconto_en | o desconto em si, aparece em destaque | 15% de desconto |
descricao_pt descricao_es descricao_en | opcional | |
local_pt local_es local_en | onde encontrar | Estande A12 |
condicoes_pt condicoes_es condicoes_en | regras de uso | Mediante apresentação do número de peito |
validade | texto livre | 17 a 20 de setembro |
logo_url | opcional | |
link | site ou rede social, opcional | |
mapa_url | link do Google Maps, opcional | |
destaque | sim para fixar no topo |
Vale a mesma tolerância da agenda: linha sem id, sem nome ou sem desconto_pt é ignorada, e onde ou categoria inválidos são corrigidos em vez de derrubar a lista.
A lista tem busca por nome, filtro de lugar e filtro de categoria, então aguenta bem passar de 50 estabelecimentos.
| pilar | o que entra | cor |
|---|---|---|
oficial | largadas, chegadas, briefings, retirada de kit, premiação | verde |
talks | palestras, painéis e rodas de conversa | azul |
ativacao | ativações das marcas nos estandes | âmbar |
filmes | filmes e documentários | lilás |
Para a lista ficar consistente, use sempre estes nomes na coluna de local:
Estande SalomonO Google Drive bloqueia hotlink de imagem, então as logos ficam no próprio repositório, em public/logos/, e o endereço fica assim:
https://app-utmb.github.io/utmb-paraty-agenda/logos/hoka.png
Esse endereço é o que vai na coluna logo_url da programação ou dos benefícios.
Para adicionar uma logo nova: coloque o arquivo em public/logos/ com nome em minúsculas e sem acento (nome-da-marca.png) e faça o push. O scripts/baixar-logos.mjs automatiza isso quando a marca mandou o arquivo pelo Drive: basta acrescentar a marca e o id do arquivo na lista de dentro do script e rodar node scripts/baixar-logos.mjs, que ele baixa, converte de PDF para PNG, apara a margem e padroniza em 256 por 256.
scripts/gerar-dados.mjs é a fonte da programação e dos benefícios. Ele gera dois formatos:
planilha/*.csv, que fica versionado no repositóriopublic/dados/*.tsv, que o app publica e serve para colar no Google SheetsPara levar uma alteração até a planilha:
scripts/gerar-dados.mjsnode scripts/gerar-dados.mjshttps://app-utmb.github.io/utmb-paraty-agenda/dados/programacao.tsvCuidado: uma planilha criada a partir de um CSV nasce com o número exato de linhas daquele CSV. Se o conteúdo novo tiver mais linhas, o Google corta a colagem em silêncio. Antes de colar, selecione as linhas existentes e use Inserir, Linhas, Inserir N linhas abaixo.
guia_atleta_url_pt (e nas de espanhol e inglês, se tiver versões traduzidas).Mesmo caminho: suba a imagem em algum lugar público e cole o link em mapa_expo_url, na planilha Config.
Atenção com o Google Drive para imagens. Link de imagem do Drive costuma não funcionar quando o app tenta exibir a imagem direto (o Drive bloqueia esse tipo de uso). Se o mapa ou a régua não aparecerem, use a alternativa abaixo.
public/ deste repositório, por exemplo public/mapa-expo.png.https://app-utmb.github.io/utmb-paraty-agenda/mapa-expo.pngVale o mesmo para a régua de patrocinadores.
A régua é a faixa fina que fica em cima da barra de navegação, visível em todas as telas. Cole o link da imagem em regua_patrocinadores_url, na planilha Config. Se o campo ficar vazio ou a imagem falhar, a faixa some sozinha e nada quebra no layout.
Dica de formato: uma imagem larga e baixa, tipo 1600 por 200 pixels, com fundo transparente ou escuro, fica bem.
Isso já está feito. Você só precisa disto se um dia trocar de planilha.
src/config.ts e troque os dois links.Se os dois campos ficarem vazios, o app volta a rodar com dados de exemplo em vez de mostrar tela em branco.
O app é publicado no GitHub Pages, de graça, sem cartão e sem servidor.
Toda vez que você faz push na branch main, o GitHub Actions roda os testes, constrói o app e publica. Se algum teste falhar, a publicação não acontece, o que evita subir uma versão quebrada.
O arquivo que cuida disso é .github/workflows/deploy.yml. Você não precisa mexer nele.
O endereço público é https://app-utmb.github.io/utmb-paraty-agenda/
npm install
npm run dev
Outros comandos:
| comando | o que faz |
|---|---|
npm run build | constrói a versão de produção |
npm test | roda a suíte de testes |
npm run audit:all | roda tipos, lint, testes e build de uma vez |
npm run icons | regenera os ícones do PWA a partir de public/favicon.svg |
npm run planilha | regenera o arquivo planilha/Paraty-Agenda.xlsx |
src/
config.ts os dois links da planilha e os ajustes gerais
App.tsx a casca do app: cabeçalho, abas, rodapé
abas.ts a lista de abas da barra de baixo
useDados.ts busca, revalidação e cache dos dados
data/
types.ts os tipos de um item da agenda e da Config
normalize.ts leitura e validação do que vem da planilha
sheets.ts rede, cache offline e dados de exemplo
exemplo.ts a agenda de demonstração
i18n/ os textos fixos da interface em pt, es e en
screens/ as cinco telas
components/ cartões, detalhe, navegação, régua, seletor de idioma
styles/global.css o tema escuro e as cores dos pilares
test/ a suíte de testes
planilha/ o modelo da planilha, em xlsx e csv
scripts/ geradores de ícones e da planilha modelo
Duas coisas ficaram encaminhadas para uma versão futura, no mesmo padrão do app oficial:
Para adicionar uma aba nova, o caminho é: incluir o nome em src/abas.ts, criar a tela em src/screens/, e acrescentar o rótulo nos três dicionários em src/i18n/.
simsim |