automated push from the terminal

This commit is contained in:
Software Shinobi
2026-02-19 00:37:10 -05:00
parent d83faa7a34
commit 3e65788ffd
9 changed files with 447 additions and 194 deletions

View File

@@ -86,23 +86,34 @@ services:
- POSTGRES_PASSWORD=maverickdb
## volumes:
##
## - /tmp/volume-data-postgres:/var/lib/postgresql/data
volumes:
- /tmp/volume-data-postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U maverickdb -d maverickdb"]
interval: 5s
timeout: 5s
retries: 5
card-players-unite-pgadmin:
user: root # Or your specific UID:GID
container_name: card-players-unite-pgadmin
image: dpage/pgadmin4
depends_on:
- card-players-unite-postgres
card-players-unite-postgres:
condition: service_healthy # THIS TELLS DOCKER TO WAIT FOR THE HEALTHCHECK
ports:
- "5480:80"
- 5480:80
volumes:
- /tmp/volumes/pgadmin4444:/var/lib/pgadmin
environment:
@@ -110,10 +121,6 @@ services:
PGADMIN_DEFAULT_PASSWORD: maverickdb
## volumes:
##
## - /tmp/volume-data-pgadmin4:/var/lib/pgadmin
##########################################
##
## hosting / relational data
@@ -124,7 +131,7 @@ services:
container_name: apis.cardplayersunited.com
image: dpage/pgadmin4
image: dpage/apis.cardplayersunited.com
build:
@@ -135,8 +142,8 @@ services:
restart: unless-stopped
depends_on:
- card-players-unite-postgres
card-players-unite-postgres:
condition: service_healthy # THIS TELLS DOCKER TO WAIT FOR THE HEALTHCHECK
ports:

View File

@@ -1,4 +1,8 @@
# adsfads
# Card Players United
## pg4 admin
http://localhost:5480/browser/
## view all tourney
@@ -6,6 +10,8 @@
## admin home
http://localhost:8888/
## login
## how to create new user

View File

@@ -0,0 +1,213 @@
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>
(shinobi test) Card Players Unite / card tournaments and events near you
</title>
<link rel="stylesheet" href="{% static '/listing/listing.css' %}">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/listing/listing.css">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&family=Sen:wght@400;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css">
</head>
<body>
<div class="navbar">
<div class="navbar-container">
<div class="logo-container">
<h1 class="logo">
Card Players Unite
</h1>
</div>
<div class="menu-container">
<ul class="menu-list">
<li class="menu-list-item active">Home</li>
<li class="menu-list-item">Tournaments</li>
<li class="menu-list-item">Teams</li>
<li class="menu-list-item">Login</li>
</ul>
</div>
<div class="profile-container">
<div class="toggle">
<i class="fas fa-moon toggle-icon"></i>
<i class="fas fa-sun toggle-icon"></i>
<div class="toggle-ball"></div>
</div>
</div>
</div>
</div>
<div class="sidebar">
<i class="left-menu-icon fas fa-home"></i>
<i class="left-menu-icon fas fa-users"></i>
<i class="left-menu-icon fas fa-bookmark"></i>
<i class="left-menu-icon fas fa-tv"></i>
</div>
<div class="container">
<div class="content-container">
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/18.jpg' %}');">
<p class="featured-desc">
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis minima voluptatibus incidunt. Accusamus, provident.
</p>
<button class="featured-button">
LEARN MORE
</button>
</div>
<div class="movie-list-container">
<h1 class="movie-list-title">Alll Tournaments</h1>
<div class="movie-list-wrapper">
<div class="movie-list">
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/8.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/9.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/10.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/11.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/12.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/1.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/1.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
</div>
<i class="fas fa-chevron-right arrow"></i>
</div>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/7.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">111WATCH</button>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/6.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">WATCH</button>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/8.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">WATCH</button>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/9.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">WATCH</button>
</div>
</div>
</div>
<!--
<script src="{% static 'listing/listing.js' %}"></script>
<script src="{% static 'listing/features.js' %}"></script>
-->
</body>
</html>

View File

@@ -1,213 +1,240 @@
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Players Unite | The Lounge</title>
<link href="https://fonts.googleapis.com/css2?family=Sen:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<style>
:root {
--aria-gold: #4dbf00; /* Matching your theme brand color [cite: 113] */
--aria-dark: #151515; /* [cite: 121] */
--aria-surface: #1f1f1f;
}
<title>
body {
font-family: 'Sen', sans-serif;
background-color: var(--aria-dark);
color: white;
margin: 0;
padding: 40px;
}
(shinobi test) Card Players Unite / card tournaments and events near you
.header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid var(--aria-gold);
padding-bottom: 20px;
margin-bottom: 40px;
}
</title>
.btn-gold {
background-color: var(--aria-gold);
color: white;
border: none;
padding: 12px 24px;
border-radius: 8px;
font-weight: bold;
cursor: pointer;
transition: transform 0.2s;
}
<link rel="stylesheet" href="{% static '/listing/listing.css' %}">
.btn-gold:hover {
transform: scale(1.05);
background-color: #3e9a00;
}
<meta charset="UTF-8">
/* Tournament Table Styling */
.tournament-grid {
width: 100%;
border-collapse: collapse;
background: var(--aria-surface);
border-radius: 12px;
overflow: hidden;
}
<meta http-equiv="X-UA-Compatible" content="IE=edge">
th, td {
padding: 18px;
text-align: left;
border-bottom: 1px solid #333;
}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
th {
background-color: #2a2a2a;
color: var(--aria-gold);
text-transform: uppercase;
font-size: 0.8rem;
}
<link rel="stylesheet" href="/listing/listing.css">
/* Modal / Popup Box */
.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.8);
justify-content: center;
align-items: center;
}
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&family=Sen:wght@400;700;800&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css">
</head>
.modal-content {
background: var(--aria-surface);
padding: 40px;
border-radius: 15px;
width: 400px;
border: 1px solid var(--aria-gold);
}
.form-group { margin-bottom: 20px; }
input, textarea {
width: 100%;
padding: 10px;
background: #111;
border: 1px solid #444;
color: white;
border-radius: 5px;
}
</style>
</head>
<body>
<div class="navbar">
<div class="header">
<h1>Card Players Unite <small style="font-size: 0.5em; color: gray;">Tournament Management</small></h1>
<button class="btn-gold" onclick="toggleModal(true)">
<i class="fas fa-plus"></i> NEW TOURNAMENT
</button>
</div>
<div class="navbar-container">
<table class="tournament-grid">
<thead>
<tr>
<th>Tournament Name</th>
<th>Description</th>
<th>Buy-in (Price)</th>
<th>Status</th>
</tr>
</thead>
<tbody id="tournament-list">
</tbody>
</table>
<div class="logo-container">
<h1 class="logo">
Card Players Unite
</h1>
</div>
<div class="menu-container">
<ul class="menu-list">
<li class="menu-list-item active">Home</li>
<li class="menu-list-item">Tournaments</li>
<li class="menu-list-item">Teams</li>
<li class="menu-list-item">Login</li>
</ul>
</div>
<div class="profile-container">
<div class="toggle">
<i class="fas fa-moon toggle-icon"></i>
<i class="fas fa-sun toggle-icon"></i>
<div class="toggle-ball"></div>
<div id="createModal" class="modal">
<div class="modal-content">
<h2 style="color: var(--aria-gold);">Host a New Table</h2>
<form id="tournamentForm">
<div class="form-group">
<label>Name</label>
<input type="text" id="name" required placeholder="High Roller Hold'em">
</div>
</div>
<div class="form-group">
<label>Description</label>
<textarea id="description" rows="3" placeholder="No-limit stakes..."></textarea>
</div>
<div class="form-group">
<label>Price</label>
<input type="number" id="rental_price" step="0.01" value="999.99">
</div>
<input type="hidden" id="rented_user_id" value="0">
<div style="display: flex; gap: 10px;">
<button type="submit" class="btn-gold">START EVENT</button>
<button type="button" class="btn-gold" style="background:#444;" onclick="toggleModal(false)">CLOSE</button>
</div>
</form>
</div>
</div>
<div class="sidebar">
<script>
// Toggle the popup
function toggleModal(show) {
document.getElementById('createModal').style.display = show ? 'flex' : 'none';
}
<i class="left-menu-icon fas fa-home"></i>
// Fetch and List Tournaments
async function fetchTournaments() {
const response = await fetch('/tournament/');
const data = await response.json();
const list = document.getElementById('tournament-list');
list.innerHTML = '';
<i class="left-menu-icon fas fa-users"></i>
data.forEach(t => {
const row = `<tr>
<td><strong>${t.name}</strong></td>
<td>${t.description}</td>
<td>$${t.rental_price}</td>
<td>${t.rented_user_id === 0 ? 'AVAILABLE' : 'BOOKED'}</td>
</tr>`;
list.innerHTML += row;
});
}
<i class="left-menu-icon fas fa-bookmark"></i>
// Create Tournament [cite: 150, 155]
document.getElementById('tournamentForm').addEventListener('submit', async (e) => {
e.preventDefault();
const payload = {
name: document.getElementById('name').value,
description: document.getElementById('description').value,
rental_price: parseFloat(document.getElementById('rental_price').value),
rented_user_id: parseInt(document.getElementById('rented_user_id').value)
};
<i class="left-menu-icon fas fa-tv"></i>
const response = await fetch('/tournament/create/', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-CSRFToken': '{{ csrf_token }}' },
body: JSON.stringify(payload)
});
</div>
if (response.ok) {
toggleModal(false);
fetchTournaments();
document.getElementById('tournamentForm').reset();
} else {
alert("The house always wins... but this time, your form failed.");
}
});
<div class="container">
// This function captures the form data and sends it to the house (the database)
async function saveTournament() {
// 1. Gather the intel from the form fields
const tournamentData = {
name: document.getElementById('name').value,
description: document.getElementById('description').value,
rental_price: parseFloat(document.getElementById('rental_price').value),
rented_user_id: 0 // Defaulting to 0 for available tables
};
<div class="content-container">
// 2. Place the bet (The POST request)
const response = await fetch('/tournament/create/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// Ensure you handle CSRF if this is rendered via Django [cite: 95]
},
body: JSON.stringify(tournamentData)
});
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/18.jpg' %}');">
if (response.ok) {
console.log("Record saved to the vault.");
// Refresh the list to show the new table
fetchTournaments();
} else {
console.error("The house declined the transaction.");
}
}
<p class="featured-desc">
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis minima voluptatibus incidunt. Accusamus, provident.
</p>
<button class="featured-button">
LEARN MORE
</button>
</div>
// This listener waits for the user to hit 'START EVENT'
document.getElementById('tournamentForm').addEventListener('submit', async (e) => {
e.preventDefault(); // Keep the lounge smooth—no page reloads
await saveTournament(); // This is the moment the record hits the database
});
<div class="movie-list-container">
<h1 class="movie-list-title">Alll Tournaments</h1>
<div class="movie-list-wrapper">
<div class="movie-list">
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/8.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/9.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/10.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/11.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/12.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/1.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
<div class="movie-list-item">
<img class="movie-list-item-img" src="{% static '/listing/imagery/1.jpg' %}" alt="">
<span class="movie-list-item-title">Her</span>
<p class="movie-list-item-desc">Lorem ipsum dolor sit amet consectetur adipisicing elit. At
hic fugit similique accusantium.</p>
<button class="movie-list-item-button">Watch</button>
</div>
</div>
<i class="fas fa-chevron-right arrow"></i>
</div>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/7.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">111WATCH</button>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/6.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">WATCH</button>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/8.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">WATCH</button>
</div>
<div class="featured-content" style="background: linear-gradient(to bottom, rgba(0,0,0,0), #151515), url('{% static 'listing/imagery/9.jpg' %}');">
<img class="featured-title" src="{% static '/listing/imagery/f-t-2.png" alt="">
<p class="featured-desc">Lorem ipsum, dolor sit amet consectetur adipisicing elit. Iusto illo dolor
deserunt nam assumenda ipsa eligendi dolore, ipsum id fugiat quo enim impedit, laboriosam omnis
minima voluptatibus incidunt. Accusamus, provident.</p>
<button class="featured-button">WATCH</button>
</div>
</div>
</div>
<!--
<script src="{% static 'listing/listing.js' %}"></script>
<script src="{% static 'listing/features.js' %}"></script>
-->
// Initialize the floor
fetchTournaments();
</script>
</body>
</html>