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


O Backend: Python e Flask



O principal do Berry Bank é o script app.py. Ele gerencia três coisas: exibe o saldo, autentica o "Pai" e processa as transações.

Crie o arquivo ~/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)

A senha, como está no código, é "pai123".
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O Backend: Python e Flask
   3. O Frontend (estilo One Piece)
   4. A Página Administrativa (templates/admin.html)
   5. A Página do Login (templates/login.html)
   6. Automatizando com Systemd e conclusão
Outros artigos deste autor

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

Leitura recomendada

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

Instalando Zabbix no CentOS 7

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts