12 Commits

Author SHA1 Message Date
github-actions[bot]
649c9f8d69 chore(release): bump version to v0.0.13 and update changelog [skip ci] 2026-02-22 15:50:28 +00:00
almazlar
fe20a69482 feat: update button and input styles with new color variables and hover/focus states
All checks were successful
Release and Build Docker Images / release-and-build (push) Successful in 1m46s
2026-02-22 18:50:17 +03:00
github-actions[bot]
4c6eebe61f chore(release): bump version to v0.0.12 and update changelog [skip ci] 2026-02-22 15:39:04 +00:00
almazlar
24424cc226 feat: update CSS variables for improved theming and styling
All checks were successful
Release and Build Docker Images / release-and-build (push) Successful in 1m46s
2026-02-22 18:38:54 +03:00
github-actions[bot]
a45d2269eb chore(release): bump version to v0.0.11 and update changelog [skip ci] 2026-02-22 15:21:10 +00:00
almazlar
f450b6fdce fix: correct spelling of 'application' in README
All checks were successful
Release and Build Docker Images / release-and-build (push) Successful in 1m45s
2026-02-22 18:20:57 +03:00
github-actions[bot]
1479827612 chore(release): bump version to v0.0.10 and update changelog [skip ci] 2026-02-22 15:10:24 +00:00
almazlar
b3f09d5dfc feat: add deployment steps for Backend and Frontend to Dokploy
Some checks failed
Release and Build Docker Images / release-and-build (push) Failing after 2m14s
2026-02-22 18:05:39 +03:00
almazlar
4c83f6670d fix: update VITE_BASE_URL to use port 8080 in Dockerfile
Some checks failed
Release and Build Docker Images / release-and-build (push) Has been cancelled
2026-02-22 17:46:20 +03:00
almazlar
d9e69e03ad fix: update server port to 8080 in Dockerfile and application properties
Some checks failed
Release and Build Docker Images / release-and-build (push) Has been cancelled
2026-02-22 17:29:04 +03:00
github-actions[bot]
c1c326aa5d chore(release): bump version to v0.0.9 and update changelog [skip ci] 2026-02-22 12:03:26 +00:00
almazlar
c26ee4f400 feat: add createdAt field to Todo entity and update database migration script
All checks were successful
Release and Build Docker Images / release-and-build (push) Successful in 1m45s
2026-02-22 15:03:11 +03:00
10 changed files with 206 additions and 57 deletions

View File

@@ -147,3 +147,11 @@ jobs:
build-args: | build-args: |
VITE_APP_VERSION=${{ steps.generate.outputs.new_tag }} VITE_APP_VERSION=${{ steps.generate.outputs.new_tag }}
VITE_BASE_URL=https://todo.almazlar.com/api VITE_BASE_URL=https://todo.almazlar.com/api
- name: Deploy to Dokploy (Backend)
run: |
curl -X POST "${{ secrets.DOKPLOY_BACKEND_WEBHOOK_URL }}"
- name: Deploy to Dokploy (Frontend)
run: |
curl -X POST "${{ secrets.DOKPLOY_FRONTEND_WEBHOOK_URL }}"

View File

@@ -1,3 +1,25 @@
## [v0.0.13] - 2026-02-22
* feat: update button and input styles with new color variables and hover/focus states (fe20a69)
## [v0.0.12] - 2026-02-22
* feat: update CSS variables for improved theming and styling (24424cc)
## [v0.0.11] - 2026-02-22
* fix: correct spelling of 'application' in README (f450b6f)
## [v0.0.10] - 2026-02-22
* feat: add deployment steps for Backend and Frontend to Dokploy (b3f09d5)
* fix: update VITE_BASE_URL to use port 8080 in Dockerfile (4c83f66)
* fix: update server port to 8080 in Dockerfile and application properties (d9e69e0)
## [v0.0.9] - 2026-02-22
* feat: add createdAt field to Todo entity and update database migration script (c26ee4f)
## [v0.0.8] - 2026-02-22 ## [v0.0.8] - 2026-02-22
* fix: update Dockerfile, application properties, and controller mappings for health check and CORS support (386f513) * fix: update Dockerfile, application properties, and controller mappings for health check and CORS support (386f513)

View File

@@ -1,2 +1,2 @@
# todo # Simple TODO applicatoon to use as template.

View File

@@ -16,6 +16,10 @@ RUN apt-get update && \
apt-get install -y curl && \ apt-get install -y curl && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
COPY --from=build /app/target/*.jar app.jar COPY --from=build /app/target/*.jar app.jar
EXPOSE 8082 EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"] ENTRYPOINT ["java", "-jar", "app.jar"]
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8080/api/actuator/health || exit 1

View File

@@ -1,30 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.3</version> <version>4.0.3</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath /> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.example</groupId> <groupId>com.example</groupId>
<artifactId>backend</artifactId> <artifactId>backend</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>backend</name> <name>backend</name>
<description>Demo project for Spring Boot</description> <description>Demo project for Spring Boot</description>
<url/> <url />
<licenses> <licenses>
<license/> <license />
</licenses> </licenses>
<developers> <developers>
<developer/> <developer />
</developers> </developers>
<scm> <scm>
<connection/> <connection />
<developerConnection/> <developerConnection />
<tag/> <tag />
<url/> <url />
</scm> </scm>
<properties> <properties>
<java.version>25</java.version> <java.version>25</java.version>
@@ -69,8 +70,19 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-starter-actuator</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-flyway</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-database-postgresql</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>

View File

@@ -1,5 +1,7 @@
package com.todo.backend.model; package com.todo.backend.model;
import java.time.LocalDateTime;
import jakarta.persistence.*; import jakarta.persistence.*;
@Entity @Entity
@@ -19,6 +21,9 @@ public class Todo {
@Column(nullable = false) @Column(nullable = false)
private boolean completed = false; private boolean completed = false;
@Column(nullable = false, updatable = false)
private LocalDateTime createdAt = LocalDateTime.now();
// Default constructor is required by JPA // Default constructor is required by JPA
public Todo() { public Todo() {
} }
@@ -62,4 +67,9 @@ public class Todo {
public void setCompleted(boolean completed) { public void setCompleted(boolean completed) {
this.completed = completed; this.completed = completed;
} }
public LocalDateTime getCreatedAt() {
return createdAt;
}
} }

View File

@@ -1,10 +1,14 @@
# backend/src/main/resources/application.properties server.port=8080
server.port=8082
server.servlet.context-path=/api server.servlet.context-path=/api
spring.application.name=backend spring.application.name=backend
spring.jpa.hibernate.ddl-auto=update # Flyway
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.flyway.baseline-on-migrate=true
# Database
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
management.endpoints.web.exposure.include=health,info,metrics management.endpoints.web.exposure.include=health,info,metrics

View File

@@ -0,0 +1,7 @@
CREATE TABLE todos (
id BIGSERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
completed BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);

View File

@@ -7,7 +7,7 @@ COPY . .
ARG VITE_APP_VERSION=dev ARG VITE_APP_VERSION=dev
ENV VITE_APP_VERSION=${VITE_APP_VERSION} ENV VITE_APP_VERSION=${VITE_APP_VERSION}
ARG VITE_BASE_URL=http://localhost:8082/api ARG VITE_BASE_URL=http://localhost:8080/api
ENV VITE_BASE_URL=${VITE_BASE_URL} ENV VITE_BASE_URL=${VITE_BASE_URL}
RUN npm run build RUN npm run build

View File

@@ -1,12 +1,74 @@
/* Existing CSS rules */
:root { :root {
--bg-color: #0f172a; --rich-cerulean-50: #eaf4fb;
--rich-cerulean-100: #d5eaf6;
--rich-cerulean-200: #aad5ee;
--rich-cerulean-300: #80c0e5;
--rich-cerulean-400: #56abdc;
--rich-cerulean-500: #2b96d4;
--rich-cerulean-600: #2378a9;
--rich-cerulean-700: #1a5a7f;
--rich-cerulean-800: #113c55;
--rich-cerulean-900: #091e2a;
--rich-cerulean-950: #06151e;
--sand-dune-50: #f7f5ed;
--sand-dune-100: #f0ebdb;
--sand-dune-200: #e1d6b7;
--sand-dune-300: #d2c293;
--sand-dune-400: #c3ae6f;
--sand-dune-500: #b49a4b;
--sand-dune-600: #907b3c;
--sand-dune-700: #6c5c2d;
--sand-dune-800: #483d1e;
--sand-dune-900: #241f0f;
--sand-dune-950: #19160b;
--alice-blue-50: #ecf3f8;
--alice-blue-100: #dae7f1;
--alice-blue-200: #b4cfe4;
--alice-blue-300: #8fb7d6;
--alice-blue-400: #699fc9;
--alice-blue-500: #4487bb;
--alice-blue-600: #366c96;
--alice-blue-700: #295170;
--alice-blue-800: #1b364b;
--alice-blue-900: #0e1b25;
--alice-blue-950: #09131a;
--ink-black-50: #eef2f6;
--ink-black-100: #dee6ed;
--ink-black-200: #bdccdb;
--ink-black-300: #9cb2c9;
--ink-black-400: #7a99b8;
--ink-black-500: #597fa6;
--ink-black-600: #476685;
--ink-black-700: #364c63;
--ink-black-800: #243342;
--ink-black-900: #121921;
--ink-black-950: #0c1217;
--taupe-50: #f4f2f0;
--taupe-100: #e9e4e2;
--taupe-200: #d3cac5;
--taupe-300: #bdafa8;
--taupe-400: #a7958b;
--taupe-500: #917a6e;
--taupe-600: #746258;
--taupe-700: #574942;
--taupe-800: #3a312c;
--taupe-900: #1d1816;
--taupe-950: #14110f;
/* New CSS Variables */
--bg-color: var(--rich-cerulean-950);
--panel-bg: rgba(30, 41, 59, 0.7); --panel-bg: rgba(30, 41, 59, 0.7);
--text-main: #f8fafc; --text-main: var(--alice-blue-200);
--text-muted: #94a3b8; --text-muted: var(--sand-dune-600);
--accent-primary: #8b5cf6; --accent-primary: var(--taupe-500);
--accent-secondary: #ec4899; --accent-secondary: var(--rich-cerulean-300);
--success: #10b981; --success: var(--sand-dune-200);
--danger: #ef4444; --danger: var(--ink-black-400);
--border-color: rgba(255, 255, 255, 0.1); --border-color: rgba(255, 255, 255, 0.1);
--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37); --glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
@@ -50,9 +112,29 @@ button {
border: none; border: none;
outline: none; outline: none;
transition: all 0.3s ease; transition: all 0.3s ease;
background-color: var(--color-smart-blue-500); /* Default background color */
color: var(--text-main);
padding: 10px 20px;
border-radius: 4px;
&:hover {
background-color: var(--color-smart-blue-600); /* Hover state background color */
}
} }
input { input {
font-family: inherit; font-family: inherit;
outline: none; outline: none;
background-color: var(--bg-color);
color: var(--text-main);
padding: 8px 12px;
border: 1px solid var(--color-smart-blue-300);
&:focus {
border-color: var(--color-smart-blue-400); /* Focus state border color */
}
}
h1, h2, h3 {
color: var(--color-smart-blue-500);
} }