mirror of
https://github.com/aculix/negotium.git
synced 2025-12-06 08:48:17 +00:00
Compare commits
No commits in common. "24018ab582e15fca4c46fe626b66771724974cdf" and "056f9fc562481cbe8522b122fa54e94b042db8fc" have entirely different histories.
24018ab582
...
056f9fc562
7
.github/workflows/docker-publish.yml
vendored
7
.github/workflows/docker-publish.yml
vendored
@ -70,6 +70,13 @@ jobs:
|
|||||||
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
|
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
|
||||||
with:
|
with:
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||||
|
tags: |
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=raw,value=latest,enable={{is_default_branch}}
|
||||||
|
|
||||||
# Build and push Docker image with Buildx (don't push on PR)
|
# Build and push Docker image with Buildx (don't push on PR)
|
||||||
# https://github.com/docker/build-push-action
|
# https://github.com/docker/build-push-action
|
||||||
|
|||||||
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/.dockerignore
|
/.DS_Store
|
||||||
/node_modules
|
/node_modules
|
||||||
|
/package-lock.json
|
||||||
20
Dockerfile
20
Dockerfile
@ -1,4 +1,5 @@
|
|||||||
FROM node:20-alpine
|
# Build stage
|
||||||
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@ -12,4 +13,19 @@ RUN npm install --include=optional
|
|||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# Build the application
|
# Build the application
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
|
# Production stage
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
# Copy built files from builder stage
|
||||||
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||||
|
|
||||||
|
# Copy nginx configuration (if needed)
|
||||||
|
# COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
# Expose port 80
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Start nginx
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
32
README.md
32
README.md
@ -1,7 +1,9 @@
|
|||||||
# Negotium
|
# Negotium - Minimalist To Do App
|
||||||
|
|
||||||
A beautiful, minimal to-do list application featuring smooth animations, intelligent date management, and a modern design that helps you stay organized and productive.
|
A beautiful, minimal to-do list application featuring smooth animations, intelligent date management, and a modern design that helps you stay organized and productive.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## 💭 Why Negotium?
|
## 💭 Why Negotium?
|
||||||
|
|
||||||
While powerful tools like Trello and Vikunja excel at managing complex projects and long-term planning, sometimes you just need a simple, focused space for your daily tasks. That's why I built Negotium, a straightforward to-do list for today and tomorrow. Nothing more, nothing less.
|
While powerful tools like Trello and Vikunja excel at managing complex projects and long-term planning, sometimes you just need a simple, focused space for your daily tasks. That's why I built Negotium, a straightforward to-do list for today and tomorrow. Nothing more, nothing less.
|
||||||
@ -20,12 +22,34 @@ Built with Svelte for speed and simplicity. No overwhelming features, no endless
|
|||||||
|
|
||||||
## 🚀 Getting Started
|
## 🚀 Getting Started
|
||||||
|
|
||||||
### Installation
|
### Quick Start with Docker (Recommended)
|
||||||
|
|
||||||
|
Pull and run the pre-built Docker image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Pull the image
|
||||||
|
docker pull ghcr.io/aculix/negotium:main
|
||||||
|
|
||||||
|
# Run the container
|
||||||
|
docker run -d -p 3000:80 --name negotium ghcr.io/aculix/negotium:main
|
||||||
|
```
|
||||||
|
|
||||||
|
Then open `http://localhost:3000` in your browser.
|
||||||
|
|
||||||
|
To stop the container:
|
||||||
|
```bash
|
||||||
|
docker stop negotium
|
||||||
|
docker rm negotium
|
||||||
|
```
|
||||||
|
|
||||||
|
### Manual Installation
|
||||||
|
|
||||||
|
If you prefer to run the application locally without Docker:
|
||||||
|
|
||||||
1. Clone the repository:
|
1. Clone the repository:
|
||||||
```bash
|
```bash
|
||||||
git clone <repository-url>
|
git clone <repository-url>
|
||||||
cd simple-do
|
cd negotium
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Install dependencies:
|
2. Install dependencies:
|
||||||
@ -40,7 +64,7 @@ npm run dev
|
|||||||
|
|
||||||
4. Open `http://localhost:3000` in your browser
|
4. Open `http://localhost:3000` in your browser
|
||||||
|
|
||||||
### Build for Production
|
#### Build for Production
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run build
|
npm run build
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
BIN
assets/screenshot.png
Normal file
BIN
assets/screenshot.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 195 KiB |
@ -15,17 +15,7 @@
|
|||||||
let selectedDate = new Date().toDateString();
|
let selectedDate = new Date().toDateString();
|
||||||
let draggedItem = null;
|
let draggedItem = null;
|
||||||
let draggedOverIndex = null;
|
let draggedOverIndex = null;
|
||||||
|
let currentDateDisplay = '';
|
||||||
const initialTasks = [
|
|
||||||
{ id: 1, text: 'Grocery shopping', completed: false, createdAt: Date.now() - 86400000 },
|
|
||||||
{ id: 2, text: "Book doctor's appointment", completed: false, createdAt: Date.now() - 172800000 },
|
|
||||||
{ id: 3, text: 'Pay bills', completed: true, createdAt: Date.now() - 259200000 },
|
|
||||||
{ id: 4, text: 'Finish project report', completed: false, createdAt: Date.now() - 345600000 },
|
|
||||||
{ id: 5, text: 'Call mom', completed: false, createdAt: Date.now() - 432000000 },
|
|
||||||
{ id: 6, text: 'Plan weekend trip', completed: true, createdAt: Date.now() - 518400000 },
|
|
||||||
{ id: 7, text: 'Read a chapter of a book', completed: false, createdAt: Date.now() - 604800000 },
|
|
||||||
{ id: 8, text: 'Exercise', completed: false, createdAt: Date.now() - 691200000 }
|
|
||||||
];
|
|
||||||
|
|
||||||
function addTask() {
|
function addTask() {
|
||||||
if (newTask.trim()) {
|
if (newTask.trim()) {
|
||||||
@ -96,13 +86,16 @@
|
|||||||
draggedOverIndex = null;
|
draggedOverIndex = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCurrentDate() {
|
$: {
|
||||||
return new Date().toLocaleDateString('en-US', {
|
currentDateDisplay = (() => {
|
||||||
weekday: 'long',
|
const date = new Date(selectedDate);
|
||||||
year: 'numeric',
|
return date.toLocaleDateString('en-US', {
|
||||||
month: 'long',
|
weekday: 'long',
|
||||||
day: 'numeric'
|
year: 'numeric',
|
||||||
});
|
month: 'long',
|
||||||
|
day: 'numeric'
|
||||||
|
});
|
||||||
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDateKey(dateString) {
|
function getDateKey(dateString) {
|
||||||
@ -114,7 +107,7 @@
|
|||||||
if (savedTasks) {
|
if (savedTasks) {
|
||||||
tasks = JSON.parse(savedTasks);
|
tasks = JSON.parse(savedTasks);
|
||||||
} else {
|
} else {
|
||||||
tasks = dateString === new Date().toDateString() ? initialTasks : [];
|
tasks = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,7 +286,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="content-header">
|
<div class="content-header">
|
||||||
<h2 class="section-title">To-dos</h2>
|
<h2 class="section-title">To-dos</h2>
|
||||||
<div class="date-display">{getCurrentDate()}</div>
|
<div class="date-display">{currentDateDisplay}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="task-input-container">
|
<div class="task-input-container">
|
||||||
|
|||||||
@ -440,11 +440,6 @@ body {
|
|||||||
width: 200px;
|
width: 200px;
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 0 auto 24px;
|
margin: 0 auto 24px;
|
||||||
filter: brightness(0) saturate(100%) invert(46%) sepia(89%) saturate(2445%) hue-rotate(224deg) brightness(101%) contrast(98%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .lottie-animation {
|
|
||||||
filter: brightness(0) saturate(100%) invert(59%) sepia(51%) saturate(3127%) hue-rotate(218deg) brightness(103%) contrast(101%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-state p {
|
.empty-state p {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user