Mix-Max

# All-in-One Multi-Feature Website (HTML + CSS + JS + Java/Spring Boot) — COMPLETE This repository contains a **complete, runnable Spring Boot** application that serves a single-page frontend (`index.html`) and provides REST APIs for Notes, Habits, Finance (Transactions), Library (Books) and Quiz questions. > **Stack**: Java 17+, Spring Boot, Spring Data JPA, H2 (default — configurable to MySQL), HTML/CSS/Vanilla JS frontend served from `/static`. --- ## 📁 Project Structure ``` all-in-one-app/ ├─ pom.xml ├─ src/ │ ├─ main/ │ │ ├─ java/ │ │ │ └─ com/example/app/ │ │ │ ├─ WebAppApplication.java │ │ │ ├─ model/ │ │ │ │ ├─ Note.java │ │ │ │ ├─ Habit.java │ │ │ │ ├─ Transaction.java │ │ │ │ ├─ Book.java │ │ │ │ └─ QuizQuestion.java │ │ │ ├─ repo/ │ │ │ │ ├─ NoteRepository.java │ │ │ │ ├─ HabitRepository.java │ │ │ │ ├─ TransactionRepository.java │ │ │ │ ├─ BookRepository.java │ │ │ │ └─ QuizQuestionRepository.java │ │ │ └─ controller/ │ │ │ ├─ NoteController.java │ │ │ ├─ HabitController.java │ │ │ ├─ FinanceController.java │ │ │ ├─ LibraryController.java │ │ │ └─ QuizController.java │ │ └─ resources/ │ │ ├─ application.properties │ │ └─ static/ │ │ └─ index.html └─ README.md ``` --- ## pom.xml ```xml 4.0.0 com.example all-in-one-app 0.0.1-SNAPSHOT All In One App All features in one Spring Boot app org.springframework.boot spring-boot-starter-parent 3.3.2 17 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime org.projectlombok lombok true org.springframework.boot spring-boot-maven-plugin ``` --- ## Java — Application Entry ### `WebAppApplication.java` ```java package com.example.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class WebAppApplication { public static void main(String[] args) { SpringApplication.run(WebAppApplication.class, args); } } ``` --- ## Models (`com.example.app.model`) All entities use `jakarta.persistence` annotations. ### `Note.java` ```java package com.example.app.model; import jakarta.persistence.*; @Entity public class Note { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 2048) private String text; public Note() {} public Note(String text) { this.text = text; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } } ``` ### `Habit.java` ```java package com.example.app.model; import jakarta.persistence.*; @Entity public class Habit { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private boolean done; public Habit() {} public Habit(String name) { this.name = name; this.done = false; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isDone() { return done; } public void setDone(boolean done) { this.done = done; } } ``` ### `Transaction.java` ```java package com.example.app.model; import jakarta.persistence.*; @Entity public class Transaction { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String descText; private double amount; public Transaction() {} public Transaction(String descText, double amount) { this.descText = descText; this.amount = amount; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getDescText() { return descText; } public void setDescText(String descText) { this.descText = descText; } public double getAmount() { return amount; } public void setAmount(double amount) { this.amount = amount; } } ``` ### `Book.java` ```java package com.example.app.model; import jakarta.persistence.*; @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; public Book() {} public Book(String title) { this.title = title; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } ``` ### `QuizQuestion.java` (complete getters/setters) ```java package com.example.app.model; import jakarta.persistence.*; @Entity public class QuizQuestion { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String question; private String optionA; private String optionB; private String optionC; private String answer; // store the correct option text public QuizQuestion() {} public QuizQuestion(String question, String optionA, String optionB, String optionC, String answer) { this.question = question; this.optionA = optionA; this.optionB = optionB; this.optionC = optionC; this.answer = answer; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getQuestion() { return question; } public void setQuestion(String question) { this.question = question; } public String getOptionA() { return optionA; } public void setOptionA(String optionA) { this.optionA = optionA; } public String getOptionB() { return optionB; } public void setOptionB(String optionB) { this.optionB = optionB; } public String getOptionC() { return optionC; } public void setOptionC(String optionC) { this.optionC = optionC; } public String getAnswer() { return answer; } public void setAnswer(String answer) { this.answer = answer; } } ``` --- ## Repositories (`com.example.app.repo`) Each repository is a simple `JpaRepository` interface. Example — `NoteRepository.java`: ```java package com.example.app.repo; import com.example.app.model.Note; import org.springframework.data.jpa.repository.JpaRepository; public interface NoteRepository extends JpaRepository {} ``` Repeat same pattern for `HabitRepository`, `TransactionRepository`, `BookRepository`, `QuizQuestionRepository` by replacing the entity type. --- ## Controllers (`com.example.app.controller`) Each controller exposes the REST API used by the frontend. ### `NoteController.java` ```java package com.example.app.controller; import com.example.app.model.Note; import com.example.app.repo.NoteRepository; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/notes") public class NoteController { private final NoteRepository repo; public NoteController(NoteRepository repo) { this.repo = repo; } @GetMapping public List all() { return repo.findAll(); } @PostMapping public Note create(@RequestBody Note note) { return repo.save(note); } @DeleteMapping("/{id}") public void delete(@PathVariable Long id) { repo.deleteById(id); } } ``` ### `HabitController.java` ```java package com.example.app.controller; import com.example.app.model.Habit; import com.example.app.repo.HabitRepository; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/habits") public class HabitController { private final HabitRepository repo; public HabitController(HabitRepository repo) { this.repo = repo; } @GetMapping public List all() { return repo.findAll(); } @PostMapping public Habit create(@RequestBody Habit habit) { return repo.save(habit); } @PutMapping("/{id}/toggle") public Habit toggle(@PathVariable Long id) { Habit h = repo.findById(id).orElseThrow(); h.setDone(!h.isDone()); return repo.save(h); } @DeleteMapping("/{id}") public void delete(@PathVariable Long id) { repo.deleteById(id); } } ``` ### `FinanceController.java` ```java package com.example.app.controller; import com.example.app.model.Transaction; import com.example.app.repo.TransactionRepository; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/finance") public class FinanceController { private final TransactionRepository repo; public FinanceController(TransactionRepository repo) { this.repo = repo; } @GetMapping public List all() { return repo.findAll(); } @PostMapping public Transaction create(@RequestBody Transaction t) { return repo.save(t); } @DeleteMapping("/{id}") public void delete(@PathVariable Long id) { repo.deleteById(id); } } ``` ### `LibraryController.java` ```java package com.example.app.controller; import com.example.app.model.Book; import com.example.app.repo.BookRepository; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/library") public class LibraryController { private final BookRepository repo; public LibraryController(BookRepository repo) { this.repo = repo; } @GetMapping public List all() { return repo.findAll(); } @PostMapping public Book create(@RequestBody Book b) { return repo.save(b); } @DeleteMapping("/{id}") public void delete(@PathVariable Long id) { repo.deleteById(id); } } ``` ### `QuizController.java` ```java package com.example.app.controller; import com.example.app.model.QuizQuestion; import com.example.app.repo.QuizQuestionRepository; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/api/quiz") public class QuizController { private final QuizQuestionRepository repo; public QuizController(QuizQuestionRepository repo) { this.repo = repo; } @GetMapping public List all() { return repo.findAll(); } @PostMapping public QuizQuestion create(@RequestBody QuizQuestion q) { return repo.save(q); } } ``` --- ## application.properties (default H2 in-memory, change for MySQL) ```properties # H2 in-memory DB (for quick start). Switch to MySQL later if you want. spring.datasource.url=jdbc:h2:mem:demo;DB_CLOSE_DELAY=-1;MODE=MySQL spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=update spring.h2.console.enabled=true spring.h2.console.path=/h2 # Serve index.html from /static spring.web.resources.static-locations=classpath:/static/ ``` **To use a file-backed H2 (persist between restarts):** ``` spring.datasource.url=jdbc:h2:file:./data/demo;MODE=MySQL ``` **To use MySQL:** add MySQL dependency to `pom.xml` and set properties like: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/appdb?useSSL=false&serverTimezone=UTC spring.datasource.username=your_user spring.datasource.password=your_pass spring.jpa.hibernate.ddl-auto=update ``` --- ## Frontend — `src/main/resources/static/index.html` Complete single-file frontend which uses the REST APIs. Save this file at `src/main/resources/static/index.html`. ```html All-in-One Web App

🚀 All-in-One Web App

Notes • Habits • Quiz • Finance • Library

Quick Add Note

New Habit

Finance

Total Balance: 0

Library

❓ Quiz

Click start to fetch questions from backend

Click Start

📝 Notes

🌱 Habits

📚 Virtual Library

``` --- ## README (quick start) 1. Install **Java 17+** and **Maven**. 2. Create project files with the structure above (or clone if you saved this as a repo). 3. From project root run: ```bash mvn spring-boot:run ``` 4. Open `http://localhost:8080/` in your browser. 5. Access H2 console at `http://localhost:8080/h2` (JDBC URL: `jdbc:h2:mem:demo`, user `sa`, blank password). To build a jar: ```bash mvn clean package java -jar target/all-in-one-app-0.0.1-SNAPSHOT.jar ``` --- ## Next improvements you might want * Add authentication (Spring Security + JWT) if multi-user is required. * Use MySQL/Postgres for persistent DB across restarts. * Add file upload support for library (book covers / PDFs). * Add charts (Chart.js) for Finance analytics. * Add client-side routing or SPA framework (React/Vue) for richer UX. --- If you want, I can now: * generate the full project as a downloadable ZIP, or * switch the datasource to MySQL and provide exact steps, or * add user authentication with registration/login and per-user data isolation. Which of these would you like next?

Comments

Popular posts from this blog

english note

First blog

CV making