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: 1.682 ]
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)
Deixando o BunsenLabs cinza de novo
Criando um servidor FTP acessível fora da LAN com o Proftpd
Acelere a publicação de seus artigos e dicas no VOL
Mamãe, quero Slack! (parte 3 - final)
Instalação do Gentoo GNU/Linux em um SSD NVMe (UEFI/GPT)
Instalação e configuração da zsh no Gentoo GNU/Linux
Container Elastic Stack para visualização de logs do Proxy Squid
Compilando o KDE 4.0 no Slackware Current
Programação (I) - Planejamento e Otimização
Instalando codecs, plugins e drivers NVidia e ATI com o EasyUbuntu
Nenhum comentário foi encontrado.
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
O Editor de Texto Nano: Simplicidade no Terminal
SynapSeq - programa para estimular as ondas cerebrais
Por que seu __DIR__ falhou ou o "inferno" dos caminhos no PHP
[Resolvido] Meu monitor suporta 100fps. Por que o máximo é 60fps nos jogos?
Jogando "Magic" gratuitamente no Linux
Zoxide e fzf no bash para incrementar o uso do Terminal
[pedido] biglinux versao 1 (0)
A falsa sensação de que entende a tal da palavra! (1)
Eu aprendi o segredo das artes! hahaha (5)









