diff --git a/.env.example b/.env.example
new file mode 100755
index 0000000..fc444bc
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,7 @@
+# Local environment variables for the WPoets full-stack test
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=wpoets_test
+DB_USERNAME=root
+DB_PASSWORD=
diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..3323b34
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+.env
+.DS_Store
diff --git a/Answers to technical questions.md b/Answers to technical questions.md
new file mode 100755
index 0000000..6339373
--- /dev/null
+++ b/Answers to technical questions.md
@@ -0,0 +1,64 @@
+# Answers to technical questions
+
+## How long did you spend on the coding test?
+I spent about 5 hours building the app, including the PHP CRUD admin panel, frontend slider layout, and database schema.
+
+If I had more time, I would add:
+- authentication and authorization for the admin panel
+- better CRUD UX with a success message that disappears automatically
+- edge case handling for many slides, especially to prevent the slider dots from distorting
+- a cleaner admin UI
+- real image upload support instead of fixed image paths
+- improved keyboard navigation and screen reader support
+- animation and swipe support for the slider on mobile devices
+- I have used constants and constant arrays in a few places for simplicity. In a larger production application, this logic would likely be abstracted into more modular and configurable structures. However, given the scope of the assignment, I chose a simpler implementation approach to avoid adding unnecessary complexity and development overhead without much practical benefit.
+
+## How would you track down a performance issue in production?
+I would first identify which page or user flow is slow. Then I would check logs, review slow database queries, and inspect the page for large files or extra requests. I would confirm that the SQL queries use the right indexes and look for frontend issues like large images or unused scripts.
+
+If needed, I would add logging or profiling around database calls to see whether the issue is backend, frontend, or network related. After that, I would use caching, pagination, or asset optimization depending on the root cause.
+
+## Please describe yourself using JSON.
+{
+ "name": "Shubham Mishra",
+ "designation": "Full Stack Software Engineer",
+ "experience": "3+ years",
+ "specialization": "Backend-heavy full stack development",
+ "skills": [
+ "PHP",
+ "Laravel",
+ "MySQL",
+ "PostgreSQL",
+ "Redis",
+ "Vue.js",
+ "React.js",
+ "JavaScript",
+ "HTML5",
+ "CSS3",
+ "Bootstrap",
+ "jQuery",
+ "REST APIs",
+ "System Design"
+ ],
+ "strengths": [
+ "scalable backend architecture",
+ "clean and maintainable code",
+ "performance optimization",
+ "database design",
+ "frontend integration",
+ "team collaboration"
+ ],
+ "experienceHighlights": {
+ "teamLeadership": "Mentored and guided a team of developers",
+ "productOwnership": "Worked extensively on long-term product development",
+ "fullStackDevelopment": true
+ },
+ "approach": "Build practical, scalable, and maintainable applications with strong focus on backend architecture and user experience.",
+ "values": {
+ "clarity": true,
+ "simplicity": true,
+ "performance": true,
+ "ownership": true,
+ "teamwork": true
+ }
+}
\ No newline at end of file
diff --git a/admin.php b/admin.php
new file mode 100755
index 0000000..1bc6b6e
--- /dev/null
+++ b/admin.php
@@ -0,0 +1,185 @@
+getMessage();
+}
+
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && $repository !== null) {
+ $action = $_POST['action'] ?? '';
+ $slideData = [
+ 'id' => $_POST['id'] ?? null,
+ 'topic' => $_POST['topic'] ?? '',
+ 'title' => $_POST['title'] ?? '',
+ 'image_path' => $_POST['image_path'] ?? '',
+ 'sort_order' => $_POST['sort_order'] ?? 0,
+ ];
+
+ try {
+ if ($action === 'save') {
+ $repository->saveSlide($slideData);
+ header('Location: admin.php?message=' . urlencode('Slide saved successfully.'));
+ exit;
+ }
+
+ if ($action === 'delete' && !empty($slideData['id'])) {
+ $repository->removeSlide((int) $slideData['id']);
+ header('Location: admin.php?message=' . urlencode('Slide deleted successfully.'));
+ exit;
+ }
+ } catch (Throwable $exception) {
+ $errorMessage = 'A database error occurred: ' . $exception->getMessage();
+ }
+}
+
+if ($repository !== null) {
+ $allSlides = $repository->fetchAllSlides();
+ $editingSlide = null;
+ if (!empty($_GET['edit'])) {
+ $editingSlide = $repository->fetchSlideById((int) $_GET['edit']);
+ }
+} else {
+ $allSlides = [];
+ $editingSlide = null;
+}
+?>
+
+
+
+