Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
4466d05
feat: Add basic backend and frontend structure
Jan 20, 2026
3a99e47
fix: fix workflow path
Jan 20, 2026
e98520a
feat: Add file tree check api and local md load api
Jan 21, 2026
8761754
fix: remove vue dependent packages
Jan 21, 2026
beda653
feat: build basic note editor page
Jan 22, 2026
134f1f2
feat: [site] add login page with form and styles
Jan 22, 2026
236beaf
feat: [site] add axios API wrapper and userStore by axios/pinia
Jan 22, 2026
d3a61cf
feat: [site] add login jump and routing rules
Jan 23, 2026
5c0bedb
feat: use HttpOnly cookie for access token handling, add logout api
Jan 23, 2026
bda7cae
fix: fix middleware response wrapper that broke non-API endpoints
Jan 23, 2026
603c5a2
feat: [site] optimize login redirection and status verification
Jan 23, 2026
c6704d0
feat: [site] optimized the style of login page
Jan 24, 2026
826994f
feat: [site] implement file tree and note preview using mock data
Jan 24, 2026
016a964
feat: [site] highlight selected node in file tree
Jan 24, 2026
c84502c
feat: [site] refactor login inputs to use shared input component
Jan 25, 2026
cb19803
feat: [site] add modal for creating new note
Jan 25, 2026
6728f00
opt: [site] optimized the focused animation of InputField
Jan 26, 2026
95d916c
feat: [site] optimized inputField style, add textHint comp
Jan 26, 2026
49bb9e2
feat: [site] add create-folder modal with mock file/folder creation
Jan 26, 2026
006b396
feat: add suffix and meta info for file node and local md detail
Jan 26, 2026
96afa02
fix: fix auth tests to use cookie-based access token
Jan 26, 2026
153ad00
chore: improve endpoint robustness, standardize path params to relati…
Jan 26, 2026
30c09e4
feat: standardize function names and add folder/file creation api
Jan 26, 2026
0b5454f
feat: [site] add file / fileTree relative api and intergrate with views
Jan 27, 2026
d79dfce
feat: standardize post request (file relative) payload
Jan 27, 2026
900a5bf
feat: [site] add notification component, optimized textHint component
Jan 27, 2026
f60c44f
feat: [site] add api calling error notification
Jan 27, 2026
0a8b3eb
feat: [site] optimized the style of fsNodeComp, show the file suffix …
Jan 27, 2026
9fede9b
feat: [site] block opening of non-md files and show warning
Jan 27, 2026
4ff829f
feat: [site] optimized the request exception capture and the animatio…
Jan 27, 2026
ed1019a
feat: add file upload api
Jan 27, 2026
8a7b870
feat: [site] adjust the style of button
Jan 28, 2026
d4d4205
feat: [site] add file upload modal and integrate api
Jan 29, 2026
9ec5ad5
feat: add file / folder remove api
Jan 29, 2026
77d64e2
feat: [site] add item deletion API and confirmation modal
Jan 29, 2026
c6309d0
feat: [site] add functoin to automatic upload of pasted image
Feb 2, 2026
6f6e0f6
fix: remove media path processing in backend
Feb 2, 2026
104f8c0
feat: [site] add media path processing in frontend
Feb 2, 2026
9c0dd72
feat: [site] add support for latex formula rendering
Feb 2, 2026
5016996
chore: update the key of the file meta
Feb 2, 2026
16f29aa
feat: add api for saving file
Feb 3, 2026
cdc53f2
feat: [site] add button for saving file
Feb 3, 2026
07c933a
chore: [site] enable auth-based route guard
Feb 3, 2026
b418adb
refactor: improve API consistency and function robustness
Feb 3, 2026
3bb3b4d
refactor: optimize user auth related apis
Feb 3, 2026
2a42151
refactor: [site] align api calls with updated backend apis
Feb 3, 2026
fcf15db
fix: [site] fix the note title text overlap issue
Feb 3, 2026
9adab5e
feat: Add file / dir rename api
Feb 6, 2026
e3a49b4
feat: [site] add file rename function and integrate api, optimize nod…
Feb 6, 2026
7a60683
chore: optimize the sort of the file tree nodes
Feb 6, 2026
47b615e
feat: [site] add a basic resize function for sub sidebar
Feb 7, 2026
ac720ac
refactor: [site] optimize the inspector of NoteEditorComp
Feb 8, 2026
6449b1b
fix: [site] unable to scroll file tree sub sidebar when content is to…
Feb 11, 2026
acd9907
feat: add new apis for the system settings management
Feb 13, 2026
8aa1ae3
feat: [site] add sub sidebar of the system settings and call api for …
Feb 13, 2026
a10f419
feat: [site] add registration availability control on login page
Feb 13, 2026
f2f0200
fix: disable user call the register api when system not allow user re…
Feb 13, 2026
276ed9a
feat: [site] add logout button for the setting sub sidebar
Feb 13, 2026
0f69f1d
feat: [site] unify button styles using ghost button
Feb 14, 2026
972bc30
feat: [site] Add a new style of input field as template and replace c…
Feb 15, 2026
deec605
refactor: [site] optimize login handler and improve ghost button comp…
Feb 15, 2026
ddb680a
feat: add new api for user password update
Feb 15, 2026
16fdf0a
feat: [site] integrate reset password API
Feb 15, 2026
e14ec3e
fix: [site] resolve modal text flicker caused by v-model binding, imp…
Feb 19, 2026
3307096
feat: [site] add style for markdown preview page
Feb 19, 2026
9118423
chore: [site] remove deprecated baseUrl from tsconfig
Feb 19, 2026
bfceed6
fix: fix typo of py file
Feb 19, 2026
98121c6
refactor: optimize system settings initialization process
Feb 19, 2026
81e3dfa
feat: auto register default admin user when the system runs for the f…
Feb 19, 2026
e64814c
feat: disable user to choose scopes when registering
Feb 20, 2026
ab13e49
feat: add user registration modal at login page
Feb 20, 2026
fc298b4
chore: [site] optimize the style of the button and scrollbar
Feb 20, 2026
a4abd8d
feat: add dockerfile and nginx config to containerize the project
Feb 20, 2026
dee485b
feat: [site] add icon for website
Feb 21, 2026
cd039ae
feat: add docker release step for workflow
Feb 21, 2026
a807d61
fix: fix Permission denied error in cicd
Feb 21, 2026
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
2 changes: 2 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[run]
concurrency = thread, greenlet, multiprocessing
16 changes: 16 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
web/node_modules
web/dist
web/.env
web/.env.example
web/.git
web/.vscode

__pycache__
*.pyc
*.pyo
venv/
.env
.env.example

.git
.gitignore
Empty file added .env.example
Empty file.
42 changes: 42 additions & 0 deletions .github/workflows/dev-ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: detection

on:
push:
branches-ignore:
- main
pull_request:
branches-ignore:
- main

permissions:
contents: read

jobs:
detection:
runs-on: ubuntu-latest
steps:
- name: Checkout repository setup
uses: actions/checkout@v4

- name: Python 3.11 setup
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install system dependencies
run: |
sudo apt-get update && sudo apt-get install -y git

- name: Install project dependencies
run: |
pip install --upgrade pip
pip install uv==0.9.7
uv sync --dev --frozen

- name: Run pre-commit checks
run: |
uv run pre-commit run --all-files --show-diff-on-failure

- name: Run pytest
run: |
uv run poe test
116 changes: 116 additions & 0 deletions .github/workflows/main-ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: detection-release

on:
push:
branches:
- main

permissions:
contents: read

jobs:
detection:
runs-on: ubuntu-latest
steps:
- name: Setup | Checkout Repository
uses: actions/checkout@v4

- name: Setup | Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install dependencies
run: |
sudo apt-get update && sudo apt-get install -y git
pip install pre-commit==4.3.0

- name: Run pre-commit checks
run: |
pre-commit run --all-files --show-diff-on-failure

release:
runs-on: ubuntu-latest
needs: detection
if: github.ref == 'refs/heads/main'
concurrency:
group: ${{ github.workflow }}-release-${{ github.ref_name }}
cancel-in-progress: false
permissions:
contents: write
steps:
- name: Setup | Checkout Repository on Release Branch
uses: actions/checkout@v4
with:
ref: ${{ github.ref_name }}
fetch-depth: 0

- name: Setup | Force release branch to be at workflow sha
run: |
git reset --hard ${{ github.sha }}

- name: Evaluate | Verify upstream has NOT changed
shell: bash
run: |
set +o pipefail

UPSTREAM_BRANCH_NAME="$(git status -sb | head -n 1 | cut -d' ' -f2 | grep -E '\.{3}' | cut -d'.' -f4)"
printf '%s\n' "Upstream branch name: $UPSTREAM_BRANCH_NAME"

set -o pipefail

if [ -z "$UPSTREAM_BRANCH_NAME" ]; then
printf >&2 '%s\n' "::error::Unable to determine upstream branch name!"
exit 1
fi

git fetch "${UPSTREAM_BRANCH_NAME%%/*}"

if ! UPSTREAM_SHA="$(git rev-parse "$UPSTREAM_BRANCH_NAME")"; then
printf >&2 '%s\n' "::error::Unable to determine upstream branch sha!"
exit 1
fi

HEAD_SHA="$(git rev-parse HEAD)"

if [ "$HEAD_SHA" != "$UPSTREAM_SHA" ]; then
printf >&2 '%s\n' "[HEAD SHA] $HEAD_SHA != $UPSTREAM_SHA [UPSTREAM SHA]"
printf >&2 '%s\n' "::error::Upstream has changed, aborting release..."
exit 1
fi

printf '%s\n' "Verified upstream branch has not changed, continuing with release..."

- name: Action | Semantic Version Release
id: release
uses: python-semantic-release/python-semantic-release@v10.3.1
with:
config_file: semantic.toml
github_token: ${{ secrets.GITHUB_TOKEN }}
git_committer_name: "github-actions"
git_committer_email: "actions@users.noreply.github.com"

- name: Publish | Upload to GitHub Release Assets
uses: python-semantic-release/publish-action@v10.3.1
if: steps.release.outputs.released == 'true'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.release.outputs.tag }}

- name: Docker login
run: |
echo "IMAGE_NAME=tropicalalgae/markoun" >> $GITHUB_ENV
echo "IMAGE_VERSION=v$(node -p "require('./package.json').version")" >> $GITHUB_ENV
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin

- name: Docker Release
env:
IMAGE_NAME: ${{ env.IMAGE_NAME }}
IMAGE_VERSION: ${{ env.IMAGE_VERSION }}
run: |
docker build -t $IMAGE_NAME:$IMAGE_VERSION .
docker tag $IMAGE_NAME:$IMAGE_VERSION $IMAGE_NAME:$IMAGE_VERSION
docker tag $IMAGE_NAME:$IMAGE_VERSION $IMAGE_NAME

docker push $IMAGE_NAME:$IMAGE_VERSION
docker push $IMAGE_NAME
103 changes: 103 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Cookiecutter specific
data/*

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover

# Translations
*.mo
*.pot

# Django stuff & logger:
*.log
log/

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# DotEnv configuration
.env

# Database
*.db
*.rdb

# Pycharm
.idea

# VS Code
.vscode/

# Spyder
.spyproject/

# Jupyter NB Checkpoints
.ipynb_checkpoints/

# exclude data from source control by default
/data/

# Mac OS-specific storage files
.DS_Store

# vim
*.swp
*.swo

# cache
.mypy_cache/
.ruff_cache/
.pytest_cache/

# venv
.venv/
cache/!.*
cov.xml
report.xml

*node_modules/
62 changes: 62 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# .pre-commit-config.yaml
default_stages: [pre-commit]

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks.git
rev: v5.0.0
hooks:
- id: check-added-large-files
args: ['--maxkb=1024']
exclude: ^web/|^web/node_modules/
- id: check-toml
exclude: ^web/
- id: check-yaml
args: ["--unsafe"]
exclude: ^web/
- id: end-of-file-fixer
exclude: ^web/
# - id: trailing-whitespace
- id: check-json
exclude: ^web/
- id: debug-statements
exclude: ^web/
- id: check-case-conflict
exclude: ^web/
- id: detect-private-key
exclude: ^web/
- id: name-tests-test
args:
- "--pytest-test-first"
exclude: ^web/

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.0
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
exclude: ^web/
- id: ruff-format
exclude: ^web/

- repo: https://github.com/codespell-project/codespell.git
rev: v2.4.1
hooks:
- id: codespell
files: \.(py)$
exclude: ^web/

- repo: https://github.com/hukkin/mdformat
rev: 0.7.22
hooks:
- id: mdformat
files: ^(?!CHANGELOG\.md$).*\.(md|markdown)$
exclude: ^web/
additional_dependencies:
- mdformat-gfm
- mdformat-black

- repo: https://github.com/ComPWA/taplo-pre-commit
rev: v0.9.3
hooks:
- id: taplo-format
exclude: ^web/
Loading