Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions mindwtr/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.git
~*
.DS_Store
6 changes: 6 additions & 0 deletions mindwtr/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: v2
name: mindwtr
description: Mindwtr is a free, offline-first task management app built on Getting Things Done (GTD) methodology.
type: application
version: 1.0.0
appVersion: "1.3.3"
64 changes: 64 additions & 0 deletions mindwtr/OlaresManifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
olaresManifest.version: '0.12.0'
olaresManifest.type: app
apiVersion: 'v3'

workloadReplicas:
mindwtr: 1
metadata:
name: mindwtr
description: A free, offline-first task management app built on Getting Things Done (GTD) methodology.
icon: https://raw.githubusercontent.com/dongdongbh/Mindwtr/main/apps/desktop/src-tauri/icons/128x128@2x.png
appid: mindwtr
version: '1.0.0'
title: Mindwtr
categories:
- Productivity_v112
- workspace
permission:
appData: true
appCache: true
spec:
versionName: '1.3.3'
fullDescription: |
Mindwtr is a free, privacy-first task management app built on the Getting Things Done (GTD) methodology.

**Key Features:**
- **GTD Workflow**: Inbox, Next Actions, Projects, Waiting, Someday/Maybe, and Archive.
- **Fast Capture & Processing**: Quickly dump ideas and tasks with context tags, priorities, reminders, and due dates.
- **Multi-Platform Sync**: Works on Web, Windows, macOS, Linux, iOS, and Android with self-hosted Mindwtr Cloud.
- **Privacy & Ownership**: All data stays on your device and your personal Olares cloud, with multi-token isolated namespaces.
- **Task Automation REST API**: Built-in REST API for scripting and workflow integrations.
upgradeDescription: |
Initial release of Mindwtr on Olares:
- Bundles Mindwtr Web (PWA) and Mindwtr Cloud (sync server + REST API).
- Unified single-domain reverse proxy for seamless same-origin sync.
- Zero-CORS setup with auto-detected sync server.
- Supports multi-device sync across Windows, macOS, Linux, iOS, and Android.
developer: dongdongbh
website: https://mindwtr.app
sourceCode: https://github.com/dongdongbh/Mindwtr
submitter: Inverstar
locale:
- en-US
- zh-CN
requiredMemory: 256Mi
limitedMemory: 1024Mi
requiredDisk: 256Mi
limitedDisk: 10Gi
requiredCpu: 0.1
limitedCpu: 2
supportArch:
- amd64
- arm64
options:
dependencies:
- name: olares
type: system
version: '>=1.12.6-0'
entrances:
- name: mindwtr
port: 5173
host: mindwtr-service
title: Mindwtr
icon: https://raw.githubusercontent.com/dongdongbh/Mindwtr/main/apps/desktop/src-tauri/icons/128x128@2x.png
openMethod: window
21 changes: 21 additions & 0 deletions mindwtr/i18n/en-US/OlaresManifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
metadata:
title: Mindwtr
description: A free, offline-first task management app built on Getting Things Done (GTD) methodology.
spec:
fullDescription: |
**Get things out of your head.**

Mindwtr is a free, privacy-first task management application based on the Getting Things Done (GTD) methodology.

**Key Features:**
- **Full GTD Workflow**: Inbox, Next Actions, Projects, Waiting, Someday/Maybe, and Archive.
- **Fast Capture & Processing**: Quickly dump ideas and tasks with context tags, priorities, reminders, and due dates.
- **Multi-Platform Sync**: Works on Web, Windows, macOS, Linux, iOS, and Android with self-hosted Mindwtr Cloud.
- **Privacy & Ownership**: All data stays on your device and your personal Olares cloud, with multi-token isolated namespaces.
- **Task Automation REST API**: Built-in REST API for scripting and workflow integrations.
upgradeDescription: |
Initial release of Mindwtr on Olares:
- Integrated Mindwtr Web (PWA) and Mindwtr Cloud (sync server + REST API).
- Unified reverse proxy for seamless same-origin sync without CORS issues.
- Auto-detects cloud URL on first launch for effortless sync setup.
- Supports native mobile and desktop clients syncing directly to your Olares domain.
21 changes: 21 additions & 0 deletions mindwtr/i18n/zh-CN/OlaresManifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
metadata:
title: Mindwtr
description: 基于「搞定」(GTD)方法论的免费离线待办任务管理应用,支持跨平台多端同步。
spec:
fullDescription: |
**把脑子里的事都倒出来。**

Mindwtr 是一款基于「搞定」(Getting Things Done,GTD)方法的免费待办和任务管理应用。可离线使用,无需账号,注重隐私。

**主要功能:**
- **GTD 流程全覆盖**:收集箱(Inbox)、下一步行动(Next)、项目(Projects)、等待(Waiting)、将来/也许(Someday)及归档。
- **极速收集与处理**:快速记录灵感与任务,支持上下文标签、优先级、提醒和截止日期。
- **多端同步与跨平台**:支持 Web、Windows、macOS、Linux、iOS 及 Android 端,通过私有部署的 Mindwtr Cloud 同步数据。
- **数据安全与隐私**:所有数据均保存在本地和您的 Olares 私有云中,支持多 Token 用户数据隔离。
- **REST API 自动化**:内置 REST API,方便与其他自动化工具集成。
upgradeDescription: |
Olares 首发版本:
- 集成 Mindwtr Web(PWA 网页版)与 Mindwtr Cloud(同步与 REST API 服务端)。
- 采用一体化反向代理架构,Web 与 API 同源,实现零 CORS 跨域配置开箱即用。
- 自动识别云同步地址,仅需设置 Token 即可无缝同步。
- 支持桌面与移动端客户端(iOS / Android / Win / Mac)直接连接 Olares 域名进行同步。
8 changes: 8 additions & 0 deletions mindwtr/owners
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
owners:
- 'Inverstar'
- 'LittleLollipop'
- 'TShentu'
- 'hysyeah'
- 'pengpeng'
- 'harveyff'
- 'zdf-org'
162 changes: 162 additions & 0 deletions mindwtr/templates/mindwtr.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: mindwtr-nginx-conf
namespace: {{ .Release.Namespace }}
data:
default.conf: |
server {
listen 5173;
server_name _;

root /usr/share/nginx/html;
index index.html;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: file:; media-src 'self' data: blob: file:; font-src 'self' data:; connect-src 'self' https: http://localhost:* ws://localhost:*; object-src 'none'; frame-src 'none'; base-uri 'self'; form-action 'self'; manifest-src 'self'; worker-src 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header X-Frame-Options "SAMEORIGIN" always;

location /v1/ {
proxy_pass http://127.0.0.1:8787/v1/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50M;
}

location /health {
proxy_pass http://127.0.0.1:8787/health;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location /ready {
proxy_pass http://127.0.0.1:8787/ready;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location /assets/ {
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: file:; media-src 'self' data: blob: file:; font-src 'self' data:; connect-src 'self' https: http://localhost:* ws://localhost:*; object-src 'none'; frame-src 'none'; base-uri 'self'; form-action 'self'; manifest-src 'self'; worker-src 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Cache-Control "public, max-age=31536000, immutable" always;
try_files $uri =404;
}

location / {
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: file:; media-src 'self' data: blob: file:; font-src 'self' data:; connect-src 'self' https: http://localhost:* ws://localhost:*; object-src 'none'; frame-src 'none'; base-uri 'self'; form-action 'self'; manifest-src 'self'; worker-src 'self'" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Cache-Control "no-cache" always;
try_files $uri /index.html;
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mindwtr
namespace: {{ .Release.Namespace }}
labels:
io.kompose.service: mindwtr
spec:
replicas: {{ .Values.workloads.mindwtr.replicaCount }}
selector:
matchLabels:
io.kompose.service: mindwtr
strategy:
type: Recreate
template:
metadata:
labels:
io.kompose.service: mindwtr
spec:
securityContext:
fsGroup: 1000
containers:
- name: mindwtr-app
image: "{{ .Values.image.app.repository }}:{{ .Values.image.app.tag }}"
imagePullPolicy: {{ .Values.image.app.pullPolicy | default "IfNotPresent" }}
ports:
- name: http
containerPort: 5173
protocol: TCP
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
cpu: 500m
memory: 256Mi
- name: mindwtr-cloud
image: "{{ .Values.image.cloud.repository }}:{{ .Values.image.cloud.tag }}"
imagePullPolicy: {{ .Values.image.cloud.pullPolicy | default "IfNotPresent" }}
env:
- name: MINDWTR_CLOUD_DATA_DIR
value: "/app/cloud_data"
- name: MINDWTR_CLOUD_CORS_ORIGIN
value: "http://localhost:5173"
- name: MINDWTR_CLOUD_ALLOW_ANY_TOKEN
value: {{ .Values.cloud.allowAnyToken | default "true" | quote }}
{{- if .Values.cloud.authTokens }}
- name: MINDWTR_CLOUD_AUTH_TOKENS
value: {{ .Values.cloud.authTokens | quote }}
{{- end }}
ports:
- name: cloud
containerPort: 8787
protocol: TCP
volumeMounts:
- name: mindwtr-data
mountPath: /app/cloud_data
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1000m
memory: 512Mi
restartPolicy: Always
volumes:
- name: nginx-conf
configMap:
name: mindwtr-nginx-conf
- name: mindwtr-data
hostPath:
type: DirectoryOrCreate
path: '{{ .Values.userspace.appData }}/mindwtr'
---
apiVersion: v1
kind: Service
metadata:
name: mindwtr-service
namespace: {{ .Release.Namespace }}
labels:
io.kompose.service: mindwtr
spec:
ports:
- name: http
port: 5173
targetPort: 5173
protocol: TCP
- name: cloud
port: 8787
targetPort: 8787
protocol: TCP
selector:
io.kompose.service: mindwtr
22 changes: 22 additions & 0 deletions mindwtr/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
image:
app:
repository: ghcr.io/dongdongbh/mindwtr-app
tag: 1.3.3
pullPolicy: IfNotPresent
cloud:
repository: ghcr.io/dongdongbh/mindwtr-cloud
tag: 1.3.3
pullPolicy: IfNotPresent

userspace:
appData: ""

workloads:
mindwtr:
replicaCount: 1

cloud:
# Allows any valid Bearer token (min 20 chars) to claim a private dataset namespace
allowAnyToken: "true"
# Optional explicit comma-separated auth tokens (min 20 chars each)
authTokens: ""
Loading