diff --git a/admin.php b/admin.php
new file mode 100644
index 00000000..02915456
--- /dev/null
+++ b/admin.php
@@ -0,0 +1,298 @@
+prepare('INSERT INTO puzzles (name, original_image, pieces, is_public, created_at) VALUES (?, ?, ?, ?, NOW())');
+ $stmt->execute([$puzzle_name, $safe_filename, $pieces, $is_public]);
+ $puzzle_id = $pdo->lastInsertId();
+
+ // Create puzzle pieces
+ create_puzzle_pieces($upload_path, $puzzle_id, $pieces);
+
+ header("Location: admin.php?success=1");
+ exit;
+ }
+ }
+ // Handle error case
+ header("Location: admin.php?error=1");
+ exit;
+}
+
+
+// Handle puzzle deletion
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_puzzle'])) {
+ $puzzle_id_to_delete = $_POST['puzzle_id'];
+
+ // First, get the original image filename to delete it
+ $stmt = $pdo->prepare('SELECT original_image FROM puzzles WHERE id = ?');
+ $stmt->execute([$puzzle_id_to_delete]);
+ $puzzle = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ if ($puzzle) {
+ // Delete original image file
+ $original_image_path = __DIR__ . '/uploads/' . $puzzle['original_image'];
+ if (file_exists($original_image_path)) {
+ unlink($original_image_path);
+ }
+ }
+
+ // Delete from DB
+ $stmt = $pdo->prepare('DELETE FROM puzzles WHERE id = ?');
+ $stmt->execute([$puzzle_id_to_delete]);
+
+ // Delete puzzle pieces directory
+ $puzzle_dir = __DIR__ . '/puzzles/' . $puzzle_id_to_delete;
+ if (is_dir($puzzle_dir)) {
+ // A simple recursive delete function
+ function delete_directory($dir) {
+ if (!is_dir($dir)) return;
+ $files = array_diff(scandir($dir), array('.','..'));
+ foreach ($files as $file) {
+ (is_dir("$dir/$file")) ? delete_directory("$dir/$file") : unlink("$dir/$file");
+ }
+ rmdir($dir);
+ }
+ delete_directory($puzzle_dir);
+ }
+
+ header("Location: admin.php?deleted=1"); // Redirect to avoid re-posting
+ exit;
+}
+
+
+$puzzles = $pdo->query('SELECT id, name, original_image, pieces, is_public, created_at FROM puzzles ORDER BY created_at DESC')->fetchAll(PDO::FETCH_ASSOC);
+
+?>
+
+
+
+
+
+ Pannello di Amministrazione
+
+
+
+
+
+
+
+
+
+
Puzzle aggiunto con successo!
+
+
+
Puzzle eliminato con successo.
+
+
+
Errore durante l'upload. Controlla i dati e riprova.
+
+
+
+
+
+
+
Gestione Puzzle
+
+
+
+
+ | ID |
+ Nome |
+ Immagine |
+ Pezzi |
+ Pubblico |
+ Creato il |
+ Azioni |
+
+
+
+
+
+ | Nessun puzzle trovato. |
+
+
+
+
+ |
+ |
+  |
+ |
+ |
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/css/custom.css b/assets/css/custom.css
new file mode 100644
index 00000000..95e9a820
--- /dev/null
+++ b/assets/css/custom.css
@@ -0,0 +1,114 @@
+:root {
+ --bg-slate-900: #0F172A;
+ --bg-slate-800: #1E293B;
+ --text-cyan-400: #22D3EE;
+ --bg-cyan-500: #06B6D4;
+ --border-slate-700: #334155;
+ --text-slate-200: #E2E8F0;
+ --text-slate-400: #94A3B8;
+}
+
+body {
+ background-color: var(--bg-slate-900);
+ color: var(--text-slate-200);
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+}
+
+.navbar {
+ background-color: rgba(30, 41, 59, 0.8); /* bg-slate-800 with opacity */
+ backdrop-filter: blur(10px);
+ -webkit-backdrop-filter: blur(10px);
+ border-bottom: 1px solid var(--border-slate-700);
+}
+
+.puzzle-board {
+ background-color: var(--bg-slate-900);
+ border: 2px dashed var(--border-slate-700);
+ aspect-ratio: 4 / 3;
+ transition: background-color 0.3s;
+}
+
+.pieces-tray {
+ background-color: var(--bg-slate-800);
+ border-radius: 0.75rem;
+ max-height: 80vh;
+ overflow-y: auto;
+ border: 1px solid var(--border-slate-700);
+}
+
+.btn-cyan {
+ background-color: var(--bg-cyan-500);
+ color: var(--bg-slate-900);
+ font-weight: bold;
+ border: none;
+ transition: background-color 0.2s;
+}
+
+.btn-cyan:hover {
+ background-color: var(--text-cyan-400);
+ color: var(--bg-slate-900);
+}
+
+.form-select {
+ background-color: var(--bg-slate-800);
+ color: var(--text-slate-200);
+ border-color: var(--border-slate-700);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%2394a3b8' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+}
+.form-select:focus {
+ background-color: var(--bg-slate-800);
+ color: var(--text-slate-200);
+ border-color: var(--text-cyan-400);
+ box-shadow: 0 0 0 0.25rem rgba(34, 211, 238, 0.25);
+}
+
+.text-cyan {
+ color: var(--text-cyan-400);
+}
+
+.text-slate-400 {
+ color: var(--text-slate-400);
+}
+
+.rounded-xl {
+ border-radius: 0.75rem;
+}
+
+/* --- Gallery --- */
+.gallery-scroll-container {
+ overflow-x: auto;
+ scrollbar-width: thin;
+ scrollbar-color: var(--border-slate-700) var(--bg-slate-900);
+}
+
+.gallery-scroll-container::-webkit-scrollbar {
+ height: 8px;
+}
+
+.gallery-scroll-container::-webkit-scrollbar-track {
+ background: var(--bg-slate-900);
+}
+
+.gallery-scroll-container::-webkit-scrollbar-thumb {
+ background-color: var(--border-slate-700);
+ border-radius: 10px;
+ border: 2px solid var(--bg-slate-900);
+}
+
+.gallery-item {
+ display: block;
+ flex: 0 0 auto; /* Prevent shrinking */
+ width: 150px; /* Fixed width for items */
+ height: 112px; /* Fixed height for items (4:3 ratio) */
+ transition: transform 0.2s ease-in-out;
+}
+
+.gallery-item:hover {
+ transform: scale(1.05);
+}
+
+.gallery-item img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover; /* Ensure images fill the container */
+}
\ No newline at end of file
diff --git a/assets/js/main.js b/assets/js/main.js
new file mode 100644
index 00000000..3fa9884b
--- /dev/null
+++ b/assets/js/main.js
@@ -0,0 +1,3 @@
+
+// Custom JavaScript will go here in future steps.
+console.log("Photo Puzzle UI loaded.");
diff --git a/assets/pasted-20250928-215554-37393ea0.png b/assets/pasted-20250928-215554-37393ea0.png
new file mode 100644
index 00000000..73f536fa
Binary files /dev/null and b/assets/pasted-20250928-215554-37393ea0.png differ
diff --git a/assets/pasted-20250928-222004-41c6ce15.png b/assets/pasted-20250928-222004-41c6ce15.png
new file mode 100644
index 00000000..2e06431a
Binary files /dev/null and b/assets/pasted-20250928-222004-41c6ce15.png differ
diff --git a/assets/pasted-20250928-222320-2fa0e2d6.png b/assets/pasted-20250928-222320-2fa0e2d6.png
new file mode 100644
index 00000000..65be9aeb
Binary files /dev/null and b/assets/pasted-20250928-222320-2fa0e2d6.png differ
diff --git a/assets/pasted-20250928-223627-60eb19e3.png b/assets/pasted-20250928-223627-60eb19e3.png
new file mode 100644
index 00000000..654739d5
Binary files /dev/null and b/assets/pasted-20250928-223627-60eb19e3.png differ
diff --git a/db/config.php b/db/config.php
index 62ed3b7b..b26381dd 100644
--- a/db/config.php
+++ b/db/config.php
@@ -5,6 +5,10 @@ define('DB_NAME', 'app_30903');
define('DB_USER', 'app_30903');
define('DB_PASS', '7d2d5a2d-6e5e-4580-a9b7-3f8e7288a494');
+// Admin credentials (for a real app, use hashed passwords)
+define('ADMIN_USER', 'admin');
+define('ADMIN_PASS_HASH', '$2y$10$WnTccK10o9fJmz3xfs6gV.0GB2PH.Smtm4NOlqlnr7SmEgMcY8uC.'); // Hash for 'MaviGames'
+
function db() {
static $pdo;
if (!$pdo) {
diff --git a/index.php b/index.php
index 6f7ffab6..0bbd7ebf 100644
--- a/index.php
+++ b/index.php
@@ -1,131 +1,236 @@
exec("CREATE TABLE IF NOT EXISTS puzzles (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(255) DEFAULT 'Senza Nome',
+ file_name VARCHAR(255) NOT NULL UNIQUE,
+ is_public BOOLEAN DEFAULT FALSE,
+ is_admin_upload BOOLEAN DEFAULT FALSE,
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+ )");
+ // Attempt to add 'name' column, ignore error if it already exists
+ try {
+ $pdo->exec("ALTER TABLE puzzles ADD COLUMN name VARCHAR(255) DEFAULT 'Senza Nome'");
+ } catch (PDOException $e) {
+ // Ignore error, likely "Duplicate column name"
+ }
+ } catch (PDOException $e) {
+ // In a real app, log this error instead of displaying it
+ die("Errore di connessione al database: " . $e->getMessage());
+ }
+}
+setup_database();
+
+// --- GLOBAL VARIABLES ---
+$uploaded_image = null;
+$error_message = null;
+$gallery_images = [];
+
+// --- DATA FETCHING ---
+try {
+ $pdo = db();
+ $stmt = $pdo->query("SELECT id, file_name, name FROM puzzles WHERE is_public = 1 OR is_admin_upload = 1 ORDER BY created_at DESC");
+ $gallery_images = $stmt->fetchAll(PDO::FETCH_ASSOC);
+} catch (PDOException $e) {
+ $error_message = "Impossibile caricare la galleria.";
+}
+
+
+// --- POST REQUEST: IMAGE UPLOAD ---
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['puzzle_image'])) {
+ $target_dir = 'uploads/';
+ $max_file_size = 5 * 1024 * 1024; // 5 MB
+ $allowed_types = ['image/jpeg', 'image/png', 'image/gif'];
+ $file = $_FILES['puzzle_image'];
+
+ if ($file['error'] !== UPLOAD_ERR_OK) {
+ $error_message = 'Si è verificato un errore durante il caricamento.';
+ } else {
+ $finfo = new finfo(FILEINFO_MIME_TYPE);
+ $mime_type = $finfo->file($file['tmp_name']);
+
+ if ($file['size'] > $max_file_size) {
+ $error_message = 'Il file è troppo grande. La dimensione massima è 5MB.';
+ } elseif (!in_array($mime_type, $allowed_types)) {
+ $error_message = 'Tipo di file non valido. Sono ammessi solo JPG, PNG, GIF.';
+ } else {
+ $file_extension = pathinfo($file['name'], PATHINFO_EXTENSION);
+ $safe_filename = uniqid('puzzle_', true) . '.' . strtolower($file_extension);
+ $target_file = $target_dir . $safe_filename;
+
+ if (move_uploaded_file($file['tmp_name'], $target_file)) {
+ // Save to database
+ try {
+ $is_public = isset($_POST['share_puzzle']) ? 1 : 0; // Ensure 1 or 0
+ $puzzle_name = !empty($_POST['puzzle_name']) ? trim($_POST['puzzle_name']) : 'Senza Nome';
+ $pdo = db();
+ $stmt = $pdo->prepare("INSERT INTO puzzles (name, file_name, is_public, is_admin_upload) VALUES (?, ?, ?, ?)");
+ $is_admin_upload = 0; // Always false for user uploads
+ $stmt->execute([$puzzle_name, $safe_filename, $is_public, $is_admin_upload]);
+ $new_puzzle_id = $pdo->lastInsertId();
+ } catch (PDOException $e) {
+ // Error saving to DB, delete file
+ unlink($target_file);
+ // Log the detailed error for developers: error_log($e->getMessage());
+ $error_message = "Si è verificato un errore nel salvataggio dei dati del puzzle: " . $e->getMessage();
+ }
+
+ if (!$error_message) {
+ // Redirect to the new puzzle page
+ header('Location: puzzle.php?id=' . $new_puzzle_id);
+ exit;
+ }
+ } else {
+ $error_message = 'Si è verificato un errore durante il salvataggio del file.';
+ }
+ }
+ }
+}
+
+// --- GET REQUESTS ---
+// Handle New Game
+if (isset($_GET['action']) && $_GET['action'] === 'new') {
+ unset($_SESSION['selected_puzzle']);
+ header('Location: ' . $_SERVER['PHP_SELF']);
+ exit;
+}
+
+
+// --- SET CURRENT IMAGE FOR DISPLAY ---
+if (isset($_SESSION['selected_puzzle'])) {
+ $uploaded_image = $_SESSION['selected_puzzle'];
+}
-$phpVersion = PHP_VERSION;
-$now = date('Y-m-d H:i:s');
?>
-
-
+
+
-
-
- New Style
-
-
-
-
+
+
+ Photo Puzzle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
Analyzing your requirements and generating your website…
-
- Loading…
-
-
= ($_SERVER['HTTP_HOST'] ?? '') === 'appwizzy.com' ? 'AppWiZZy' : 'Flatlogic' ?> AI is collecting your requirements and applying the first changes.
-
This page will update automatically as the plan is implemented.
-
Runtime: PHP = htmlspecialchars($phpVersion) ?> — UTC = htmlspecialchars($now) ?>
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tavola del Puzzle
+
+
+
+
+
+
+
; ?>)
+
+
Crea un nuovo Puzzle
+
Carica un'immagine per iniziare.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/login.php b/login.php
new file mode 100644
index 00000000..1ab40d3f
--- /dev/null
+++ b/login.php
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ Admin Login
+
+
+
+
+
+
Accesso Admin
+
+
+
+
+
+
+
diff --git a/logout.php b/logout.php
new file mode 100644
index 00000000..95db42cf
--- /dev/null
+++ b/logout.php
@@ -0,0 +1,6 @@
+ [4, 4], // 4x4 grid
+ 32 => [8, 4], // 8x4 grid
+ 64 => [8, 8] // 8x8 grid
+];
+if (!isset($valid_difficulties[$difficulty])) {
+ $difficulty = 16; // Fallback to default if invalid
+}
+list($cols, $rows) = $valid_difficulties[$difficulty];
+
+$puzzle = null;
+$error_message = '';
+$pieces = [];
+$source_width = 1;
+$source_height = 1;
+
+// --- DATA FETCHING & PUZZLE CREATION ---
+if ($puzzle_id > 0) {
+ try {
+ $pdo = db();
+ $stmt = $pdo->prepare("SELECT * FROM puzzles WHERE id = ?");
+ $stmt->execute([$puzzle_id]);
+ $puzzle = $stmt->fetch(PDO::FETCH_ASSOC);
+
+ if (!$puzzle) {
+ $error_message = "Puzzle non trovato.";
+ } else {
+ $image_path = 'uploads/' . $puzzle['file_name'];
+ if (!file_exists($image_path)) {
+ $error_message = "File immagine del puzzle non trovato.";
+ } else {
+ $image_info = getimagesize($image_path);
+ $source_width = $image_info[0];
+ $source_height = $image_info[1];
+
+ // Use a difficulty-specific directory
+ $pieces_dir = sprintf('puzzles/%d/%d', $puzzle['id'], $difficulty);
+ if (!is_dir($pieces_dir)) {
+ mkdir($pieces_dir, 0777, true);
+ }
+
+ $piece_files = glob($pieces_dir . '/piece_*.jpg');
+
+ if (count($piece_files) !== ($cols * $rows)) {
+ foreach ($piece_files as $file) { unlink($file); }
+
+ $mime_type = $image_info['mime'];
+ $source_image = null;
+ switch ($mime_type) {
+ case 'image/jpeg': $source_image = imagecreatefromjpeg($image_path); break;
+ case 'image/png': $source_image = imagecreatefrompng($image_path); break;
+ case 'image/gif': $source_image = imagecreatefromgif($image_path); break;
+ default: $error_message = "Formato immagine non supportato."; break;
+ }
+
+ if ($source_image) {
+ $piece_width = floor($source_width / $cols);
+ $piece_height = floor($source_height / $rows);
+
+ for ($y = 0; $y < $rows; $y++) {
+ for ($x = 0; $x < $cols; $x++) {
+ $piece = imagecreatetruecolor($piece_width, $piece_height);
+ imagecopy($piece, $source_image, 0, 0, $x * $piece_width, $y * $piece_height, $piece_width, $piece_height);
+ imagejpeg($piece, "{$pieces_dir}/piece_{$y}_{$x}.jpg", 95);
+ imagedestroy($piece);
+ }
+ }
+ imagedestroy($source_image);
+ }
+ }
+
+ $pieces = glob($pieces_dir . '/piece_*.jpg');
+ shuffle($pieces);
+ }
+ }
+ } catch (PDOException $e) {
+ $error_message = "Errore di sistema: " . $e->getMessage();
+ }
+} else {
+ $error_message = "ID del puzzle non valido.";
+}
+?>
+
+
+
+
+
+ Risolvi:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
I Tuoi Pezzi
+
+
+
; ?>)
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/puzzles/6/16/piece_0_0.jpg b/puzzles/6/16/piece_0_0.jpg
new file mode 100644
index 00000000..984c89d0
Binary files /dev/null and b/puzzles/6/16/piece_0_0.jpg differ
diff --git a/puzzles/6/16/piece_0_1.jpg b/puzzles/6/16/piece_0_1.jpg
new file mode 100644
index 00000000..c388dd42
Binary files /dev/null and b/puzzles/6/16/piece_0_1.jpg differ
diff --git a/puzzles/6/16/piece_0_2.jpg b/puzzles/6/16/piece_0_2.jpg
new file mode 100644
index 00000000..3c5e31a8
Binary files /dev/null and b/puzzles/6/16/piece_0_2.jpg differ
diff --git a/puzzles/6/16/piece_0_3.jpg b/puzzles/6/16/piece_0_3.jpg
new file mode 100644
index 00000000..a09b924e
Binary files /dev/null and b/puzzles/6/16/piece_0_3.jpg differ
diff --git a/puzzles/6/16/piece_1_0.jpg b/puzzles/6/16/piece_1_0.jpg
new file mode 100644
index 00000000..ccde8bdb
Binary files /dev/null and b/puzzles/6/16/piece_1_0.jpg differ
diff --git a/puzzles/6/16/piece_1_1.jpg b/puzzles/6/16/piece_1_1.jpg
new file mode 100644
index 00000000..915c48e0
Binary files /dev/null and b/puzzles/6/16/piece_1_1.jpg differ
diff --git a/puzzles/6/16/piece_1_2.jpg b/puzzles/6/16/piece_1_2.jpg
new file mode 100644
index 00000000..e7806414
Binary files /dev/null and b/puzzles/6/16/piece_1_2.jpg differ
diff --git a/puzzles/6/16/piece_1_3.jpg b/puzzles/6/16/piece_1_3.jpg
new file mode 100644
index 00000000..a8c041e1
Binary files /dev/null and b/puzzles/6/16/piece_1_3.jpg differ
diff --git a/puzzles/6/16/piece_2_0.jpg b/puzzles/6/16/piece_2_0.jpg
new file mode 100644
index 00000000..a850db9f
Binary files /dev/null and b/puzzles/6/16/piece_2_0.jpg differ
diff --git a/puzzles/6/16/piece_2_1.jpg b/puzzles/6/16/piece_2_1.jpg
new file mode 100644
index 00000000..fbc0d595
Binary files /dev/null and b/puzzles/6/16/piece_2_1.jpg differ
diff --git a/puzzles/6/16/piece_2_2.jpg b/puzzles/6/16/piece_2_2.jpg
new file mode 100644
index 00000000..9d9729a8
Binary files /dev/null and b/puzzles/6/16/piece_2_2.jpg differ
diff --git a/puzzles/6/16/piece_2_3.jpg b/puzzles/6/16/piece_2_3.jpg
new file mode 100644
index 00000000..aabb211d
Binary files /dev/null and b/puzzles/6/16/piece_2_3.jpg differ
diff --git a/puzzles/6/16/piece_3_0.jpg b/puzzles/6/16/piece_3_0.jpg
new file mode 100644
index 00000000..4585c334
Binary files /dev/null and b/puzzles/6/16/piece_3_0.jpg differ
diff --git a/puzzles/6/16/piece_3_1.jpg b/puzzles/6/16/piece_3_1.jpg
new file mode 100644
index 00000000..83a617e9
Binary files /dev/null and b/puzzles/6/16/piece_3_1.jpg differ
diff --git a/puzzles/6/16/piece_3_2.jpg b/puzzles/6/16/piece_3_2.jpg
new file mode 100644
index 00000000..cb488214
Binary files /dev/null and b/puzzles/6/16/piece_3_2.jpg differ
diff --git a/puzzles/6/16/piece_3_3.jpg b/puzzles/6/16/piece_3_3.jpg
new file mode 100644
index 00000000..6aa86058
Binary files /dev/null and b/puzzles/6/16/piece_3_3.jpg differ
diff --git a/puzzles/6/32/piece_0_0.jpg b/puzzles/6/32/piece_0_0.jpg
new file mode 100644
index 00000000..858e866a
Binary files /dev/null and b/puzzles/6/32/piece_0_0.jpg differ
diff --git a/puzzles/6/32/piece_0_1.jpg b/puzzles/6/32/piece_0_1.jpg
new file mode 100644
index 00000000..4ad813e3
Binary files /dev/null and b/puzzles/6/32/piece_0_1.jpg differ
diff --git a/puzzles/6/32/piece_0_2.jpg b/puzzles/6/32/piece_0_2.jpg
new file mode 100644
index 00000000..89cf300e
Binary files /dev/null and b/puzzles/6/32/piece_0_2.jpg differ
diff --git a/puzzles/6/32/piece_0_3.jpg b/puzzles/6/32/piece_0_3.jpg
new file mode 100644
index 00000000..5b3e804a
Binary files /dev/null and b/puzzles/6/32/piece_0_3.jpg differ
diff --git a/puzzles/6/32/piece_0_4.jpg b/puzzles/6/32/piece_0_4.jpg
new file mode 100644
index 00000000..714e2698
Binary files /dev/null and b/puzzles/6/32/piece_0_4.jpg differ
diff --git a/puzzles/6/32/piece_0_5.jpg b/puzzles/6/32/piece_0_5.jpg
new file mode 100644
index 00000000..b1ffa65f
Binary files /dev/null and b/puzzles/6/32/piece_0_5.jpg differ
diff --git a/puzzles/6/32/piece_0_6.jpg b/puzzles/6/32/piece_0_6.jpg
new file mode 100644
index 00000000..eae7f5ac
Binary files /dev/null and b/puzzles/6/32/piece_0_6.jpg differ
diff --git a/puzzles/6/32/piece_0_7.jpg b/puzzles/6/32/piece_0_7.jpg
new file mode 100644
index 00000000..152b4833
Binary files /dev/null and b/puzzles/6/32/piece_0_7.jpg differ
diff --git a/puzzles/6/32/piece_1_0.jpg b/puzzles/6/32/piece_1_0.jpg
new file mode 100644
index 00000000..4ae6af47
Binary files /dev/null and b/puzzles/6/32/piece_1_0.jpg differ
diff --git a/puzzles/6/32/piece_1_1.jpg b/puzzles/6/32/piece_1_1.jpg
new file mode 100644
index 00000000..cdb8784f
Binary files /dev/null and b/puzzles/6/32/piece_1_1.jpg differ
diff --git a/puzzles/6/32/piece_1_2.jpg b/puzzles/6/32/piece_1_2.jpg
new file mode 100644
index 00000000..d3de9c4b
Binary files /dev/null and b/puzzles/6/32/piece_1_2.jpg differ
diff --git a/puzzles/6/32/piece_1_3.jpg b/puzzles/6/32/piece_1_3.jpg
new file mode 100644
index 00000000..759b28e9
Binary files /dev/null and b/puzzles/6/32/piece_1_3.jpg differ
diff --git a/puzzles/6/32/piece_1_4.jpg b/puzzles/6/32/piece_1_4.jpg
new file mode 100644
index 00000000..57404422
Binary files /dev/null and b/puzzles/6/32/piece_1_4.jpg differ
diff --git a/puzzles/6/32/piece_1_5.jpg b/puzzles/6/32/piece_1_5.jpg
new file mode 100644
index 00000000..96332dda
Binary files /dev/null and b/puzzles/6/32/piece_1_5.jpg differ
diff --git a/puzzles/6/32/piece_1_6.jpg b/puzzles/6/32/piece_1_6.jpg
new file mode 100644
index 00000000..07f2fc6b
Binary files /dev/null and b/puzzles/6/32/piece_1_6.jpg differ
diff --git a/puzzles/6/32/piece_1_7.jpg b/puzzles/6/32/piece_1_7.jpg
new file mode 100644
index 00000000..23dd4cb8
Binary files /dev/null and b/puzzles/6/32/piece_1_7.jpg differ
diff --git a/puzzles/6/32/piece_2_0.jpg b/puzzles/6/32/piece_2_0.jpg
new file mode 100644
index 00000000..5ae5218f
Binary files /dev/null and b/puzzles/6/32/piece_2_0.jpg differ
diff --git a/puzzles/6/32/piece_2_1.jpg b/puzzles/6/32/piece_2_1.jpg
new file mode 100644
index 00000000..098745ab
Binary files /dev/null and b/puzzles/6/32/piece_2_1.jpg differ
diff --git a/puzzles/6/32/piece_2_2.jpg b/puzzles/6/32/piece_2_2.jpg
new file mode 100644
index 00000000..1e89c137
Binary files /dev/null and b/puzzles/6/32/piece_2_2.jpg differ
diff --git a/puzzles/6/32/piece_2_3.jpg b/puzzles/6/32/piece_2_3.jpg
new file mode 100644
index 00000000..993be12d
Binary files /dev/null and b/puzzles/6/32/piece_2_3.jpg differ
diff --git a/puzzles/6/32/piece_2_4.jpg b/puzzles/6/32/piece_2_4.jpg
new file mode 100644
index 00000000..dbf2a740
Binary files /dev/null and b/puzzles/6/32/piece_2_4.jpg differ
diff --git a/puzzles/6/32/piece_2_5.jpg b/puzzles/6/32/piece_2_5.jpg
new file mode 100644
index 00000000..ed743139
Binary files /dev/null and b/puzzles/6/32/piece_2_5.jpg differ
diff --git a/puzzles/6/32/piece_2_6.jpg b/puzzles/6/32/piece_2_6.jpg
new file mode 100644
index 00000000..e690ca1b
Binary files /dev/null and b/puzzles/6/32/piece_2_6.jpg differ
diff --git a/puzzles/6/32/piece_2_7.jpg b/puzzles/6/32/piece_2_7.jpg
new file mode 100644
index 00000000..a835b531
Binary files /dev/null and b/puzzles/6/32/piece_2_7.jpg differ
diff --git a/puzzles/6/32/piece_3_0.jpg b/puzzles/6/32/piece_3_0.jpg
new file mode 100644
index 00000000..65e3faf5
Binary files /dev/null and b/puzzles/6/32/piece_3_0.jpg differ
diff --git a/puzzles/6/32/piece_3_1.jpg b/puzzles/6/32/piece_3_1.jpg
new file mode 100644
index 00000000..bd23b43e
Binary files /dev/null and b/puzzles/6/32/piece_3_1.jpg differ
diff --git a/puzzles/6/32/piece_3_2.jpg b/puzzles/6/32/piece_3_2.jpg
new file mode 100644
index 00000000..69375d4d
Binary files /dev/null and b/puzzles/6/32/piece_3_2.jpg differ
diff --git a/puzzles/6/32/piece_3_3.jpg b/puzzles/6/32/piece_3_3.jpg
new file mode 100644
index 00000000..339235a3
Binary files /dev/null and b/puzzles/6/32/piece_3_3.jpg differ
diff --git a/puzzles/6/32/piece_3_4.jpg b/puzzles/6/32/piece_3_4.jpg
new file mode 100644
index 00000000..de4cc7b2
Binary files /dev/null and b/puzzles/6/32/piece_3_4.jpg differ
diff --git a/puzzles/6/32/piece_3_5.jpg b/puzzles/6/32/piece_3_5.jpg
new file mode 100644
index 00000000..a567d6c7
Binary files /dev/null and b/puzzles/6/32/piece_3_5.jpg differ
diff --git a/puzzles/6/32/piece_3_6.jpg b/puzzles/6/32/piece_3_6.jpg
new file mode 100644
index 00000000..06b7cd6a
Binary files /dev/null and b/puzzles/6/32/piece_3_6.jpg differ
diff --git a/puzzles/6/32/piece_3_7.jpg b/puzzles/6/32/piece_3_7.jpg
new file mode 100644
index 00000000..bfc75f40
Binary files /dev/null and b/puzzles/6/32/piece_3_7.jpg differ
diff --git a/puzzles/6/64/piece_0_0.jpg b/puzzles/6/64/piece_0_0.jpg
new file mode 100644
index 00000000..8e64c57d
Binary files /dev/null and b/puzzles/6/64/piece_0_0.jpg differ
diff --git a/puzzles/6/64/piece_0_1.jpg b/puzzles/6/64/piece_0_1.jpg
new file mode 100644
index 00000000..a31aa965
Binary files /dev/null and b/puzzles/6/64/piece_0_1.jpg differ
diff --git a/puzzles/6/64/piece_0_2.jpg b/puzzles/6/64/piece_0_2.jpg
new file mode 100644
index 00000000..ca5207af
Binary files /dev/null and b/puzzles/6/64/piece_0_2.jpg differ
diff --git a/puzzles/6/64/piece_0_3.jpg b/puzzles/6/64/piece_0_3.jpg
new file mode 100644
index 00000000..fad3e912
Binary files /dev/null and b/puzzles/6/64/piece_0_3.jpg differ
diff --git a/puzzles/6/64/piece_0_4.jpg b/puzzles/6/64/piece_0_4.jpg
new file mode 100644
index 00000000..43aa50c3
Binary files /dev/null and b/puzzles/6/64/piece_0_4.jpg differ
diff --git a/puzzles/6/64/piece_0_5.jpg b/puzzles/6/64/piece_0_5.jpg
new file mode 100644
index 00000000..7b0f0a3f
Binary files /dev/null and b/puzzles/6/64/piece_0_5.jpg differ
diff --git a/puzzles/6/64/piece_0_6.jpg b/puzzles/6/64/piece_0_6.jpg
new file mode 100644
index 00000000..c1245ff3
Binary files /dev/null and b/puzzles/6/64/piece_0_6.jpg differ
diff --git a/puzzles/6/64/piece_0_7.jpg b/puzzles/6/64/piece_0_7.jpg
new file mode 100644
index 00000000..abcd1c92
Binary files /dev/null and b/puzzles/6/64/piece_0_7.jpg differ
diff --git a/puzzles/6/64/piece_1_0.jpg b/puzzles/6/64/piece_1_0.jpg
new file mode 100644
index 00000000..a245568c
Binary files /dev/null and b/puzzles/6/64/piece_1_0.jpg differ
diff --git a/puzzles/6/64/piece_1_1.jpg b/puzzles/6/64/piece_1_1.jpg
new file mode 100644
index 00000000..c01055d6
Binary files /dev/null and b/puzzles/6/64/piece_1_1.jpg differ
diff --git a/puzzles/6/64/piece_1_2.jpg b/puzzles/6/64/piece_1_2.jpg
new file mode 100644
index 00000000..c2661065
Binary files /dev/null and b/puzzles/6/64/piece_1_2.jpg differ
diff --git a/puzzles/6/64/piece_1_3.jpg b/puzzles/6/64/piece_1_3.jpg
new file mode 100644
index 00000000..34410c9a
Binary files /dev/null and b/puzzles/6/64/piece_1_3.jpg differ
diff --git a/puzzles/6/64/piece_1_4.jpg b/puzzles/6/64/piece_1_4.jpg
new file mode 100644
index 00000000..7d82c4dd
Binary files /dev/null and b/puzzles/6/64/piece_1_4.jpg differ
diff --git a/puzzles/6/64/piece_1_5.jpg b/puzzles/6/64/piece_1_5.jpg
new file mode 100644
index 00000000..1a8fd791
Binary files /dev/null and b/puzzles/6/64/piece_1_5.jpg differ
diff --git a/puzzles/6/64/piece_1_6.jpg b/puzzles/6/64/piece_1_6.jpg
new file mode 100644
index 00000000..8c5b203a
Binary files /dev/null and b/puzzles/6/64/piece_1_6.jpg differ
diff --git a/puzzles/6/64/piece_1_7.jpg b/puzzles/6/64/piece_1_7.jpg
new file mode 100644
index 00000000..94b16d7b
Binary files /dev/null and b/puzzles/6/64/piece_1_7.jpg differ
diff --git a/puzzles/6/64/piece_2_0.jpg b/puzzles/6/64/piece_2_0.jpg
new file mode 100644
index 00000000..629d7a0e
Binary files /dev/null and b/puzzles/6/64/piece_2_0.jpg differ
diff --git a/puzzles/6/64/piece_2_1.jpg b/puzzles/6/64/piece_2_1.jpg
new file mode 100644
index 00000000..c755784f
Binary files /dev/null and b/puzzles/6/64/piece_2_1.jpg differ
diff --git a/puzzles/6/64/piece_2_2.jpg b/puzzles/6/64/piece_2_2.jpg
new file mode 100644
index 00000000..d87cee6e
Binary files /dev/null and b/puzzles/6/64/piece_2_2.jpg differ
diff --git a/puzzles/6/64/piece_2_3.jpg b/puzzles/6/64/piece_2_3.jpg
new file mode 100644
index 00000000..5e0956e1
Binary files /dev/null and b/puzzles/6/64/piece_2_3.jpg differ
diff --git a/puzzles/6/64/piece_2_4.jpg b/puzzles/6/64/piece_2_4.jpg
new file mode 100644
index 00000000..8d82a89a
Binary files /dev/null and b/puzzles/6/64/piece_2_4.jpg differ
diff --git a/puzzles/6/64/piece_2_5.jpg b/puzzles/6/64/piece_2_5.jpg
new file mode 100644
index 00000000..affe9994
Binary files /dev/null and b/puzzles/6/64/piece_2_5.jpg differ
diff --git a/puzzles/6/64/piece_2_6.jpg b/puzzles/6/64/piece_2_6.jpg
new file mode 100644
index 00000000..ea25c280
Binary files /dev/null and b/puzzles/6/64/piece_2_6.jpg differ
diff --git a/puzzles/6/64/piece_2_7.jpg b/puzzles/6/64/piece_2_7.jpg
new file mode 100644
index 00000000..5bc633be
Binary files /dev/null and b/puzzles/6/64/piece_2_7.jpg differ
diff --git a/puzzles/6/64/piece_3_0.jpg b/puzzles/6/64/piece_3_0.jpg
new file mode 100644
index 00000000..67ab4efe
Binary files /dev/null and b/puzzles/6/64/piece_3_0.jpg differ
diff --git a/puzzles/6/64/piece_3_1.jpg b/puzzles/6/64/piece_3_1.jpg
new file mode 100644
index 00000000..fe0a29b4
Binary files /dev/null and b/puzzles/6/64/piece_3_1.jpg differ
diff --git a/puzzles/6/64/piece_3_2.jpg b/puzzles/6/64/piece_3_2.jpg
new file mode 100644
index 00000000..15bacaa6
Binary files /dev/null and b/puzzles/6/64/piece_3_2.jpg differ
diff --git a/puzzles/6/64/piece_3_3.jpg b/puzzles/6/64/piece_3_3.jpg
new file mode 100644
index 00000000..1d489207
Binary files /dev/null and b/puzzles/6/64/piece_3_3.jpg differ
diff --git a/puzzles/6/64/piece_3_4.jpg b/puzzles/6/64/piece_3_4.jpg
new file mode 100644
index 00000000..cc974ddb
Binary files /dev/null and b/puzzles/6/64/piece_3_4.jpg differ
diff --git a/puzzles/6/64/piece_3_5.jpg b/puzzles/6/64/piece_3_5.jpg
new file mode 100644
index 00000000..1a25dabd
Binary files /dev/null and b/puzzles/6/64/piece_3_5.jpg differ
diff --git a/puzzles/6/64/piece_3_6.jpg b/puzzles/6/64/piece_3_6.jpg
new file mode 100644
index 00000000..d577dd47
Binary files /dev/null and b/puzzles/6/64/piece_3_6.jpg differ
diff --git a/puzzles/6/64/piece_3_7.jpg b/puzzles/6/64/piece_3_7.jpg
new file mode 100644
index 00000000..7ae7edb0
Binary files /dev/null and b/puzzles/6/64/piece_3_7.jpg differ
diff --git a/puzzles/6/64/piece_4_0.jpg b/puzzles/6/64/piece_4_0.jpg
new file mode 100644
index 00000000..ec54ad31
Binary files /dev/null and b/puzzles/6/64/piece_4_0.jpg differ
diff --git a/puzzles/6/64/piece_4_1.jpg b/puzzles/6/64/piece_4_1.jpg
new file mode 100644
index 00000000..4fd818ea
Binary files /dev/null and b/puzzles/6/64/piece_4_1.jpg differ
diff --git a/puzzles/6/64/piece_4_2.jpg b/puzzles/6/64/piece_4_2.jpg
new file mode 100644
index 00000000..bad3719c
Binary files /dev/null and b/puzzles/6/64/piece_4_2.jpg differ
diff --git a/puzzles/6/64/piece_4_3.jpg b/puzzles/6/64/piece_4_3.jpg
new file mode 100644
index 00000000..9af124e2
Binary files /dev/null and b/puzzles/6/64/piece_4_3.jpg differ
diff --git a/puzzles/6/64/piece_4_4.jpg b/puzzles/6/64/piece_4_4.jpg
new file mode 100644
index 00000000..3851f7ca
Binary files /dev/null and b/puzzles/6/64/piece_4_4.jpg differ
diff --git a/puzzles/6/64/piece_4_5.jpg b/puzzles/6/64/piece_4_5.jpg
new file mode 100644
index 00000000..df537de3
Binary files /dev/null and b/puzzles/6/64/piece_4_5.jpg differ
diff --git a/puzzles/6/64/piece_4_6.jpg b/puzzles/6/64/piece_4_6.jpg
new file mode 100644
index 00000000..cb26edc1
Binary files /dev/null and b/puzzles/6/64/piece_4_6.jpg differ
diff --git a/puzzles/6/64/piece_4_7.jpg b/puzzles/6/64/piece_4_7.jpg
new file mode 100644
index 00000000..96b8782d
Binary files /dev/null and b/puzzles/6/64/piece_4_7.jpg differ
diff --git a/puzzles/6/64/piece_5_0.jpg b/puzzles/6/64/piece_5_0.jpg
new file mode 100644
index 00000000..606e805b
Binary files /dev/null and b/puzzles/6/64/piece_5_0.jpg differ
diff --git a/puzzles/6/64/piece_5_1.jpg b/puzzles/6/64/piece_5_1.jpg
new file mode 100644
index 00000000..ec37879c
Binary files /dev/null and b/puzzles/6/64/piece_5_1.jpg differ
diff --git a/puzzles/6/64/piece_5_2.jpg b/puzzles/6/64/piece_5_2.jpg
new file mode 100644
index 00000000..8b6e8908
Binary files /dev/null and b/puzzles/6/64/piece_5_2.jpg differ
diff --git a/puzzles/6/64/piece_5_3.jpg b/puzzles/6/64/piece_5_3.jpg
new file mode 100644
index 00000000..70377628
Binary files /dev/null and b/puzzles/6/64/piece_5_3.jpg differ
diff --git a/puzzles/6/64/piece_5_4.jpg b/puzzles/6/64/piece_5_4.jpg
new file mode 100644
index 00000000..fcea5e8b
Binary files /dev/null and b/puzzles/6/64/piece_5_4.jpg differ
diff --git a/puzzles/6/64/piece_5_5.jpg b/puzzles/6/64/piece_5_5.jpg
new file mode 100644
index 00000000..b30aee37
Binary files /dev/null and b/puzzles/6/64/piece_5_5.jpg differ
diff --git a/puzzles/6/64/piece_5_6.jpg b/puzzles/6/64/piece_5_6.jpg
new file mode 100644
index 00000000..45288dd6
Binary files /dev/null and b/puzzles/6/64/piece_5_6.jpg differ
diff --git a/puzzles/6/64/piece_5_7.jpg b/puzzles/6/64/piece_5_7.jpg
new file mode 100644
index 00000000..c89da18d
Binary files /dev/null and b/puzzles/6/64/piece_5_7.jpg differ
diff --git a/puzzles/6/64/piece_6_0.jpg b/puzzles/6/64/piece_6_0.jpg
new file mode 100644
index 00000000..a6694d8f
Binary files /dev/null and b/puzzles/6/64/piece_6_0.jpg differ
diff --git a/puzzles/6/64/piece_6_1.jpg b/puzzles/6/64/piece_6_1.jpg
new file mode 100644
index 00000000..9b897091
Binary files /dev/null and b/puzzles/6/64/piece_6_1.jpg differ
diff --git a/puzzles/6/64/piece_6_2.jpg b/puzzles/6/64/piece_6_2.jpg
new file mode 100644
index 00000000..01a2e9e0
Binary files /dev/null and b/puzzles/6/64/piece_6_2.jpg differ
diff --git a/puzzles/6/64/piece_6_3.jpg b/puzzles/6/64/piece_6_3.jpg
new file mode 100644
index 00000000..385a2cc6
Binary files /dev/null and b/puzzles/6/64/piece_6_3.jpg differ
diff --git a/puzzles/6/64/piece_6_4.jpg b/puzzles/6/64/piece_6_4.jpg
new file mode 100644
index 00000000..1b14d91d
Binary files /dev/null and b/puzzles/6/64/piece_6_4.jpg differ
diff --git a/puzzles/6/64/piece_6_5.jpg b/puzzles/6/64/piece_6_5.jpg
new file mode 100644
index 00000000..9ff1a2cc
Binary files /dev/null and b/puzzles/6/64/piece_6_5.jpg differ
diff --git a/puzzles/6/64/piece_6_6.jpg b/puzzles/6/64/piece_6_6.jpg
new file mode 100644
index 00000000..c9765dcc
Binary files /dev/null and b/puzzles/6/64/piece_6_6.jpg differ
diff --git a/puzzles/6/64/piece_6_7.jpg b/puzzles/6/64/piece_6_7.jpg
new file mode 100644
index 00000000..0d19d14e
Binary files /dev/null and b/puzzles/6/64/piece_6_7.jpg differ
diff --git a/puzzles/6/64/piece_7_0.jpg b/puzzles/6/64/piece_7_0.jpg
new file mode 100644
index 00000000..e442d67a
Binary files /dev/null and b/puzzles/6/64/piece_7_0.jpg differ
diff --git a/puzzles/6/64/piece_7_1.jpg b/puzzles/6/64/piece_7_1.jpg
new file mode 100644
index 00000000..c804c256
Binary files /dev/null and b/puzzles/6/64/piece_7_1.jpg differ
diff --git a/puzzles/6/64/piece_7_2.jpg b/puzzles/6/64/piece_7_2.jpg
new file mode 100644
index 00000000..f837311c
Binary files /dev/null and b/puzzles/6/64/piece_7_2.jpg differ
diff --git a/puzzles/6/64/piece_7_3.jpg b/puzzles/6/64/piece_7_3.jpg
new file mode 100644
index 00000000..4f606c9f
Binary files /dev/null and b/puzzles/6/64/piece_7_3.jpg differ
diff --git a/puzzles/6/64/piece_7_4.jpg b/puzzles/6/64/piece_7_4.jpg
new file mode 100644
index 00000000..1b3f3463
Binary files /dev/null and b/puzzles/6/64/piece_7_4.jpg differ
diff --git a/puzzles/6/64/piece_7_5.jpg b/puzzles/6/64/piece_7_5.jpg
new file mode 100644
index 00000000..f8d6b66a
Binary files /dev/null and b/puzzles/6/64/piece_7_5.jpg differ
diff --git a/puzzles/6/64/piece_7_6.jpg b/puzzles/6/64/piece_7_6.jpg
new file mode 100644
index 00000000..99ab2c44
Binary files /dev/null and b/puzzles/6/64/piece_7_6.jpg differ
diff --git a/puzzles/6/64/piece_7_7.jpg b/puzzles/6/64/piece_7_7.jpg
new file mode 100644
index 00000000..3a56406e
Binary files /dev/null and b/puzzles/6/64/piece_7_7.jpg differ
diff --git a/uploads/puzzle_68d9b058cc5df2.07610559.jpg b/uploads/puzzle_68d9b058cc5df2.07610559.jpg
new file mode 100644
index 00000000..a956dfbd
Binary files /dev/null and b/uploads/puzzle_68d9b058cc5df2.07610559.jpg differ
diff --git a/uploads/puzzle_68d9b07ebbab67.32755006.jpg b/uploads/puzzle_68d9b07ebbab67.32755006.jpg
new file mode 100644
index 00000000..a8aca963
Binary files /dev/null and b/uploads/puzzle_68d9b07ebbab67.32755006.jpg differ
diff --git a/uploads/puzzle_68d9b0835fe3c1.90272325.jpg b/uploads/puzzle_68d9b0835fe3c1.90272325.jpg
new file mode 100644
index 00000000..e425fc2e
Binary files /dev/null and b/uploads/puzzle_68d9b0835fe3c1.90272325.jpg differ
diff --git a/uploads/puzzle_68d9b08dbafc66.03782442.jpg b/uploads/puzzle_68d9b08dbafc66.03782442.jpg
new file mode 100644
index 00000000..a956dfbd
Binary files /dev/null and b/uploads/puzzle_68d9b08dbafc66.03782442.jpg differ
diff --git a/uploads/puzzle_68d9b17e11da81.29475683.jpg b/uploads/puzzle_68d9b17e11da81.29475683.jpg
new file mode 100644
index 00000000..a956dfbd
Binary files /dev/null and b/uploads/puzzle_68d9b17e11da81.29475683.jpg differ
diff --git a/uploads/puzzle_68d9b301ebe351.45585775.jpg b/uploads/puzzle_68d9b301ebe351.45585775.jpg
new file mode 100644
index 00000000..a956dfbd
Binary files /dev/null and b/uploads/puzzle_68d9b301ebe351.45585775.jpg differ