From 1e4265917b8a4a1f186efe16c30c221b7d763ec7 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 13 Dec 2025 11:06:47 +0000 Subject: [PATCH] v0.1*NotWorkingCurrently --- assets/css/custom.css | 16 ++ dashboard.php | 62 ++++++ db/config.php | 18 +- db/migrations/001_initial_schema.sql | 45 +++++ index.php | 230 +++++++++-------------- login.php | 117 ++++++++++++ logout.php | 22 +++ ocr/config.php | 27 +++ readme.txt | 44 +++++ register.php | 116 ++++++++++++ upload.php | 59 ++++++ uploads/Screenshot 2025-12-12 203959.png | Bin 0 -> 30507 bytes 12 files changed, 610 insertions(+), 146 deletions(-) create mode 100644 assets/css/custom.css create mode 100644 dashboard.php create mode 100644 db/migrations/001_initial_schema.sql create mode 100644 login.php create mode 100644 logout.php create mode 100644 ocr/config.php create mode 100644 readme.txt create mode 100644 register.php create mode 100644 upload.php create mode 100644 uploads/Screenshot 2025-12-12 203959.png diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..0fd6e0f --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,16 @@ +/* Animations */ +@keyframes fadeInSlideUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-on-load { + opacity: 0; + animation: fadeInSlideUp 0.8s ease-out forwards; +} \ No newline at end of file diff --git a/dashboard.php b/dashboard.php new file mode 100644 index 0000000..27b8d3a --- /dev/null +++ b/dashboard.php @@ -0,0 +1,62 @@ + + + + + + + Dashboard - AI Study Planner + + + + + + + + + + +
+
+
+

Welcome, !

+

This is your personal dashboard. From here, you can manage your study materials and view your generated study plans.

+

You can start by uploading a new study material.

+
+
+
+ + + + diff --git a/db/config.php b/db/config.php index 3885459..b47441d 100644 --- a/db/config.php +++ b/db/config.php @@ -13,5 +13,21 @@ function db() { PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); } - return $pdo; + return $pdo; } + +function run_migrations() { + $pdo = db(); + $migration_file = __DIR__ . '/migrations/001_initial_schema.sql'; + if (file_exists($migration_file)) { + try { + $sql = file_get_contents($migration_file); + $pdo->exec($sql); + } catch (PDOException $e) { + // Optional: log error without crashing + error_log("Migration failed: " . $e->getMessage()); + } + } +} + +run_migrations(); diff --git a/db/migrations/001_initial_schema.sql b/db/migrations/001_initial_schema.sql new file mode 100644 index 0000000..06ecbe9 --- /dev/null +++ b/db/migrations/001_initial_schema.sql @@ -0,0 +1,45 @@ + +CREATE TABLE IF NOT EXISTS `users` ( + `id` varchar(36) NOT NULL, + `email` varchar(255) NOT NULL, + `password_hash` varchar(255) NOT NULL, + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `materials` ( + `id` varchar(36) NOT NULL, + `user_id` varchar(36) NOT NULL, + `file_path` varchar(255) NOT NULL, + `upload_type` enum('pdf','pptx','image') NOT NULL, + `extracted_text` text, + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + CONSTRAINT `materials_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `study_plans` ( + `id` varchar(36) NOT NULL, + `user_id` varchar(36) NOT NULL, + `material_id` varchar(36) NOT NULL, + `test_date` date NOT NULL, + `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `user_id` (`user_id`), + KEY `material_id` (`material_id`), + CONSTRAINT `study_plans_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, + CONSTRAINT `study_plans_ibfk_2` FOREIGN KEY (`material_id`) REFERENCES `materials` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +CREATE TABLE IF NOT EXISTS `plan_items` ( + `id` varchar(36) NOT NULL, + `plan_id` varchar(36) NOT NULL, + `day_number` int(11) NOT NULL, + `task_text` text NOT NULL, + `is_done` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `plan_id` (`plan_id`), + CONSTRAINT `plan_items_ibfk_1` FOREIGN KEY (`plan_id`) REFERENCES `study_plans` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/index.php b/index.php index 7205f3d..8bc4f6b 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,90 @@ - - + + - - - New Style - - - - - - - - - - - - - - - - - - - + + + AI Study Planner + + + + + + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-
-
- + + + +
+
+
+

From Clutter to Clarity

+

Upload your Hebrew study material → get a personal AI study plan.

+ + Start Now + +
+
+ +
+
+
+
+
+
+

Upload Your Material

+
+
+ + +
+
+ +
+
+
+
+
+
+
+
+
+ + + + - + \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 0000000..0afde09 --- /dev/null +++ b/login.php @@ -0,0 +1,117 @@ + + + + + + Login - AI Study Planner + + + + + + + + + + +
+
+
+ prepare("SELECT id, username, email, password FROM users WHERE email = ?"); + $stmt->execute([$email]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + // Password is correct, start session + $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + $_SESSION['email'] = $user['email']; + + // Redirect to the dashboard + header("Location: dashboard.php"); + exit(); + } else { + $error = 'Invalid email or password.'; + } + } catch (PDOException $e) { + $error = 'Database error. Please try again later.'; + // error_log($e->getMessage()); + } + } +} +?> +

Welcome Back

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+
+
+

Don't have an account? Register here

+
+
+
+
+ + + + diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..6f6b58b --- /dev/null +++ b/logout.php @@ -0,0 +1,22 @@ + get_ocr_key(), +]; + diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..0a442e9 --- /dev/null +++ b/readme.txt @@ -0,0 +1,44 @@ +How to get your API keys: + +**1. OCR (Tesseract)** + +Tesseract is a free, open-source OCR engine. You don't need an API key in the traditional sense, but you do need to install it on your server. + +- **On Debian/Ubuntu:** + `sudo apt update` + `sudo apt install tesseract-ocr` + `sudo apt install tesseract-ocr-heb` (for Hebrew language support) + +- **On CentOS/RHEL:** + `sudo yum install tesseract` + (You may need to find a repository that has the Hebrew language pack) + +No API key needs to be set in the environment variables for Tesseract. The application will call it from the command line. + +**2. AI Service (Free Tier or Mock)** + +For the MVP, we are using a free or mock AI service. There are several options for free language models. One option is to use a free tier from a provider. Another is to set up a local model if you have the hardware. + +For a simple mock setup, you can have the application return a pre-defined JSON response without calling a real AI. + +If you choose a service that provides an API key, you will need to set it in your `.env` file: +`AI_API_KEY="your_key_here"` + +**3. Email Provider (Free SMTP)** + +You can use a service like Mailgun or SendGrid which offer free tiers for a limited number of emails per month. + +- **Sign up for a free account** on a provider like Mailgun. +- **Verify your domain.** This is a necessary step to be able to send emails. +- **Get your SMTP credentials.** They will look something like this: + - Host: `smtp.mailgun.org` + - Port: `587` + - Username: `postmaster@yourdomain.com` + - Password: `a_long_secret_password` + +- **Set these credentials in your `.env` file:** + `SMTP_HOST="smtp.mailgun.org"` + `SMTP_PORT="587"` + `SMTP_USER="your_username"` + `SMTP_PASS="your_password"` + `MAIL_FROM="you@yourdomain.com"` diff --git a/register.php b/register.php new file mode 100644 index 0000000..5d13215 --- /dev/null +++ b/register.php @@ -0,0 +1,116 @@ + + + + + + Register - AI Study Planner + + + + + + + + + + +
+
+
+

Create Your Account

+ prepare("SELECT id FROM users WHERE email = ?"); + $stmt->execute([$email]); + if ($stmt->fetch()) { + $error = 'A user with this email already exists.'; + } else { + // Hash password + $hashed_password = password_hash($password, PASSWORD_DEFAULT); + + // Insert user + $stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"); + if ($stmt->execute([$username, $email, $hashed_password])) { + // Redirect to login page with a success message + header("Location: login.php?registered=success"); + exit(); + } else { + $error = 'Something went wrong. Please try again later.'; + } + } + } catch (PDOException $e) { + // In a real app, you would log this error. + $error = 'Database error. Please try again later.'; + // error_log($e->getMessage()); + } + } +} +?> + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+

Already have an account? Login here

+
+
+
+
+ + + + diff --git a/upload.php b/upload.php new file mode 100644 index 0000000..92715b6 --- /dev/null +++ b/upload.php @@ -0,0 +1,59 @@ + + + + + + Upload Status + + + + +
+
+
+ Sorry, only JPG, JPEG, PNG, PDF & PPTX files are allowed."; + $uploadOk = 0; + } + + // Check if $uploadOk is set to 0 by an error + if ($uploadOk == 0) { + echo "

Your file was not uploaded.

"; + // if everything is ok, try to upload file + } else { + if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { + echo "

The file ". htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) ." has been uploaded.

"; + echo "

We are now processing your file. You will be redirected shortly.

"; + // In a real app, you would redirect to the material preview page, e.g.: + // header("Location: material_preview.php?file=" . urlencode(basename( $_FILES["fileToUpload"]["name"])))); + } else { + echo "

Sorry, there was an error uploading your file.

"; + } + } + ?> + Back to Home +
+
+
+ + diff --git a/uploads/Screenshot 2025-12-12 203959.png b/uploads/Screenshot 2025-12-12 203959.png new file mode 100644 index 0000000000000000000000000000000000000000..9be2a4b365c5a7d6299ee9104d94316b4b6c28e9 GIT binary patch literal 30507 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 E0z}k~tpET3 literal 0 HcmV?d00001