Berry Bank: Criando um Banco Digital Gamificado para seus Filhos com Gentoo, Flask e Tailscale
Berry é a moeda do anime One Piece, um anime que meus filhos gostam. Aproveitando isso, resolvi criar um "banco virtual" para gerenciar os Berries deles.
[ Hits: 126 ]
Por: Xerxes em 15/02/2026
app.py. Ele gerencia três coisas: exibe o saldo, autentica o "Pai" e processa as transações.
~/berry_bank/app.py:
from flask import Flask, render_template, request, redirect, url_for, session
import sqlite3
from datetime import datetime
app = Flask(__name__)
app.secret_key = 'segredo_super_secreto_do_one_piece' # Troque por algo aleatório
# Configuração do Banco de Dados
def init_db():
conn = sqlite3.connect('dados.db')
c = conn.cursor()
# Tabela de crianças e saldos
c.execute('''CREATE TABLE IF NOT EXISTS kids
(id INTEGER PRIMARY KEY, name TEXT, balance INTEGER)''')
# Tabela de histórico de transações
c.execute('''CREATE TABLE IF NOT EXISTS history
(id INTEGER PRIMARY KEY, kid_id INTEGER, amount INTEGER, reason TEXT, timestamp TEXT)''')
# Inserindo as crianças iniciais (se não existirem)
c.execute("SELECT count(*) FROM kids")
if c.fetchone()[0] == 0:
c.execute("INSERT INTO kids (name, balance) VALUES (?, ?)", ("Filho2", 0))
c.execute("INSERT INTO kids (name, balance) VALUES (?, ?)", ("Filho1", 0))
conn.commit()
conn.close()
# Rota Principal (Pública - Visualização)
@app.route('/')
def index():
conn = sqlite3.connect('dados.db')
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute("SELECT * FROM kids")
kids = c.fetchall()
conn.close()
return render_template('index.html', kids=kids)
# Rota de Login (Área do Pai)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
if request.form['password'] == 'pai123': # Senha simples para uso local
session['logged_in'] = True
return redirect(url_for('admin'))
else:
return "Senha incorreta! A Marinha foi avisada."
return render_template('login.html')
# Painel Administrativo
@app.route('/admin')
def admin():
if not session.get('logged_in'): return redirect(url_for('login'))
conn = sqlite3.connect('dados.db')
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute("SELECT * FROM kids")
kids = c.fetchall()
# Pega as últimas 5 transações
c.execute("""SELECT h.amount, h.reason, h.timestamp, k.name
FROM history h JOIN kids k ON h.kid_id = k.id
ORDER BY h.id DESC LIMIT 5""")
history = c.fetchall()
conn.close()
return render_template('admin.html', kids=kids, history=history)
# Processar Transação (Adicionar/Remover Berries)
@app.route('/update', methods=['POST'])
def update():
if not session.get('logged_in'): return redirect(url_for('login'))
kid_id = request.form['kid_id']
amount = int(request.form['amount'])
reason = request.form['reason']
conn = sqlite3.connect('dados.db')
c = conn.cursor()
# Atualiza saldo
c.execute("UPDATE kids SET balance = balance + ? WHERE id = ?", (amount, kid_id))
# Registra no histórico
timestamp = datetime.now().strftime("%d/%m %H:%M")
c.execute("INSERT INTO history (kid_id, amount, reason, timestamp) VALUES (?, ?, ?, ?)",
(kid_id, amount, reason, timestamp))
conn.commit()
conn.close()
return redirect(url_for('admin'))
if __name__ == '__main__':
init_db()
# host='0.0.0.0' permite acesso da rede local
app.run(host='0.0.0.0', port=5000)
Mamãe, quero descompactar e também compactar arquivos no terminal!
Miyoo Mini Plus + Onion OS (Linux)
Shadow Era: Jogo de cartas colecionáveis para Android
WhatsApp com Chamadas no Linux via Waydroid
Sport: Frontend para Slackbuilds ao estilo Ports do BSD
Software livre, software comunitário!
Auditoria de computadores com OPEN-AUDIT
Uma geral pela configuração pós-instalação do Slackware
Podman - um mecanismo de contêiner sem daemon
Nenhum comentário foi encontrado.
Berry Bank: Criando um Banco Digital Gamificado para seus Filhos com Gentoo, Flask e Tailscale
Papagaiando o XFCE com temas e recursos
Recuperando arquivos com o Photorec de discos zoados
Usando o --load-average no Gentoo para evitar OOM Kill
Instalando o COSMIC DE no Gentoo (systemd)
Quando vocês pararam de testar distros? (24)
Ajudante para criar dicas e artigos no VOL (6)
Problemas com o "startx&... no Slackware (13)









