Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
2372578
Removed unused legacy eslintrc dependency. Name of scripts are now th…
Nils-Kolvenbach Oct 3, 2025
8ef1f00
Update VSCode settings and recommendations for improved formatting an…
Nils-Kolvenbach Oct 3, 2025
2b1761d
Switched to pnpm
Nils-Kolvenbach Oct 3, 2025
9e63d67
Using pnpm in scripts and CI/CD
Nils-Kolvenbach Oct 3, 2025
98846dc
Updated all dependencies but electron and tanstack router due to bugs
Nils-Kolvenbach Oct 4, 2025
48ff4d2
Updated Sentry usage based on current docs
Nils-Kolvenbach Oct 4, 2025
1268002
Fixed ts errors of fontsource
Nils-Kolvenbach Oct 4, 2025
10c9172
Removed duplicate src directory and configured shadcn with aliases
Nils-Kolvenbach Oct 4, 2025
9af12e7
Changed eslint config from deprecated to new
Nils-Kolvenbach Oct 5, 2025
baa19c5
Using CSS variables for components
Nils-Kolvenbach Oct 5, 2025
6c57029
Added prettier tailwind plugin
Nils-Kolvenbach Oct 5, 2025
f576e7b
Moved utils to correct folder
Nils-Kolvenbach Oct 5, 2025
860ecaf
Removed not needed body classes
Nils-Kolvenbach Oct 5, 2025
2f01e11
Changed brand color with primary color
Nils-Kolvenbach Oct 5, 2025
2b67fda
Updated avatar and button components
Nils-Kolvenbach Oct 5, 2025
cf6c0b1
Refactored theme-provider into seperate hook and component
Nils-Kolvenbach Oct 5, 2025
5853f52
Removed unused interface
Nils-Kolvenbach Oct 5, 2025
7130009
Updated all shadcn components. Hooks, Utils and Variants now have the…
Nils-Kolvenbach Oct 6, 2025
24ba69c
Applied formatting
Nils-Kolvenbach Oct 6, 2025
457f8d4
Fixed some type errors
Nils-Kolvenbach Oct 6, 2025
8593b3e
Added border to all buttons but ghost variant
Nils-Kolvenbach Oct 6, 2025
0802e19
Updated Core
Nils-Kolvenbach Nov 3, 2025
3cd91e3
Sheet and Dialog components now have the correct bg color as well as …
Nils-Kolvenbach Nov 6, 2025
68619d5
Updated some dependencies
Nils-Kolvenbach Nov 6, 2025
c6db702
Added Empty component and used it for Projects and Assets Pages. Aler…
Nils-Kolvenbach Nov 7, 2025
c5ee0ae
Update DropdownMenu component styles for consistency
Nils-Kolvenbach Nov 7, 2025
0d484af
Removed brand color for primary color
Nils-Kolvenbach Nov 7, 2025
95241d7
Added changeset
Nils-Kolvenbach Nov 7, 2025
ce30a4e
Merge pull request #86 from elek-io/fix-shadcn
Nils-Kolvenbach Nov 7, 2025
726dc8d
Enforce strict linting rules
Nils-Kolvenbach Nov 7, 2025
06650ab
Automatically fixed linting errors and warnings
Nils-Kolvenbach Nov 7, 2025
53b6ccf
Fixed linting errors by asuring awaiting async calls wherever possibl…
Nils-Kolvenbach Nov 7, 2025
e0c9eb7
Fixed all remaining linting errors
Nils-Kolvenbach Nov 7, 2025
9e24542
Downgraded @sentry/react to 10.17.0 since latest @sentry/electron wan…
Nils-Kolvenbach Nov 7, 2025
17e86ce
Using type cast for now
Nils-Kolvenbach Nov 7, 2025
b5100bd
Added README.md and more developer documentation
Nils-Kolvenbach Nov 8, 2025
407b3ff
Restricted href color change to main area
Nils-Kolvenbach Nov 10, 2025
d8995e3
Added shadcn sidebar and skeleton components. Modified sidebar to be …
Nils-Kolvenbach Nov 10, 2025
eb857e4
Added project sidebar and switcher components
Nils-Kolvenbach Nov 10, 2025
fa759bf
Using the new components instead of custom ones. Also slightly change…
Nils-Kolvenbach Nov 10, 2025
ced1883
Removed unused components
Nils-Kolvenbach Nov 10, 2025
19b29a6
Moved all custom components out of ui folder.
Nils-Kolvenbach Nov 10, 2025
b1cac94
Using button icon prop and removed padding for synchronize button
Nils-Kolvenbach Nov 11, 2025
539452c
Added ButtonGroup component to sidebar and moved all variants into th…
Nils-Kolvenbach Nov 11, 2025
a384004
Merge pull request #87 from elek-io/strict-linting
Nils-Kolvenbach Nov 17, 2025
93ff2ed
Added tanstack query devtools
Nils-Kolvenbach Nov 17, 2025
a8f4b36
Removed IPC from route context
Nils-Kolvenbach Nov 17, 2025
e8d0106
Added most queryOptions and mutationOptions. Using queryClient with i…
Nils-Kolvenbach Nov 17, 2025
be622d8
Using queryClient instead of direct IPC calls for Projects
Nils-Kolvenbach Nov 17, 2025
bf28bc9
Merge branch 'dev-optimizations' into shadcn-sidebar
Nils-Kolvenbach Nov 17, 2025
acbf70c
Fixed errors from merging
Nils-Kolvenbach Nov 17, 2025
9f80475
Enabled linter in CI/CD
Nils-Kolvenbach Nov 17, 2025
55e964f
Merge pull request #88 from elek-io/shadcn-sidebar
Nils-Kolvenbach Nov 17, 2025
e1acceb
Merge branch 'dev-optimizations' into optimize-data-loading
Nils-Kolvenbach Nov 17, 2025
968fd89
Fixed linting errors
Nils-Kolvenbach Nov 17, 2025
8642d9a
Added developer documentation for querying and mutating data. Updated…
Nils-Kolvenbach Nov 17, 2025
9b47277
Disabled select component should not be clickable
Nils-Kolvenbach Nov 17, 2025
7c8d05f
Renamed sentry.ts to index.ts and using env.d.ts for types
Nils-Kolvenbach Nov 18, 2025
b0b498c
Added README as entry for dev documentation and updated all documenta…
Nils-Kolvenbach Nov 18, 2025
2a903e2
Implemented content translation context and provider. Refactored proj…
Nils-Kolvenbach Nov 18, 2025
3b63042
Fixed active ring color for sidebar. Improved app and user header
Nils-Kolvenbach Nov 19, 2025
21a105f
Added item component. Skeleton now is span instead of div for better …
Nils-Kolvenbach Nov 19, 2025
7ca4d98
Updated Asset design and added expand, update, save and delete buttons
Nils-Kolvenbach Nov 19, 2025
a77246f
Merged util functions with dependencies to current user and project i…
Nils-Kolvenbach Nov 19, 2025
b061507
Using Project and User providers with corresponding hooks to reduce t…
Nils-Kolvenbach Nov 22, 2025
a164ef1
Updated documentation about the new hooks and providers
Nils-Kolvenbach Nov 22, 2025
c7a14f9
Added useQueryNoError hook
Nils-Kolvenbach Nov 23, 2025
737648b
Added documentation for naming conventions for destructured hook
Nils-Kolvenbach Nov 23, 2025
90d95f5
Updated Core
Nils-Kolvenbach Nov 29, 2025
a40a3bb
Fixed build by not using path alias for vite tanstack router plugin
Nils-Kolvenbach Nov 29, 2025
96c34da
Open devtools also in prod build for now
Nils-Kolvenbach Nov 29, 2025
10411a3
Using useUser and useProject hooks where possible. Using useQueryNoEr…
Nils-Kolvenbach Nov 29, 2025
1341713
Using path alias for component imports
Nils-Kolvenbach Nov 30, 2025
fd8f563
Fixed linting problems and changed destructured isPending boolean nam…
Nils-Kolvenbach Nov 30, 2025
d327cfd
Refactored diffs for all object types to use existing forms instead o…
Nils-Kolvenbach Dec 1, 2025
fa707a2
Removed now obsolete create-update-xyz-page and use xyz-form instead.…
Nils-Kolvenbach Dec 1, 2025
7ca3978
Fixed issue with URL constructor and git@... urls. Now supports SSH a…
Nils-Kolvenbach Dec 1, 2025
d944aa7
Added loading indicator when deleting a Project
Nils-Kolvenbach Dec 1, 2025
f15f56b
Removed duplicate router.invalidate calls
Nils-Kolvenbach Dec 1, 2025
d18df34
Refactored queries to use customMutationOptions wrapper function for …
Nils-Kolvenbach Dec 1, 2025
f8cc02b
Removed zustand and store
Nils-Kolvenbach Dec 2, 2025
642e596
Updated documentation
Nils-Kolvenbach Dec 2, 2025
3294368
Added breadcrumbs via provider and hook that takes the current Route …
Nils-Kolvenbach Dec 4, 2025
cb54c83
fix: linting no unused variables
Nils-Kolvenbach Dec 4, 2025
68d1713
Added documentation for breadcrumbs
Nils-Kolvenbach Dec 4, 2025
b741e09
Added changesets
Nils-Kolvenbach Dec 4, 2025
aed694b
Merge pull request #89 from elek-io/optimize-data-loading
Nils-Kolvenbach Dec 4, 2025
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
5 changes: 5 additions & 0 deletions .changeset/bitter-oranges-yawn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@elek-io/client': patch
---

Added README.md and more developer documentation
5 changes: 5 additions & 0 deletions .changeset/moody-tips-share.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@elek-io/client': patch
---

Fixed Shadcn init and components
5 changes: 5 additions & 0 deletions .changeset/shy-badgers-drum.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@elek-io/client': patch
---

Using new provider for breadcrumbs to allow for static and dynamic page labels in conjuction with Tanstack router and query.
5 changes: 5 additions & 0 deletions .changeset/violet-parks-move.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@elek-io/client': patch
---

Using Tanstack query as a wrapper around IPC calls for cache handling. Improved perceived performance since we do not wait for data to load before rendering pages and components.
12 changes: 6 additions & 6 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
- package-ecosystem: 'npm' # See documentation for possible values
directory: '/' # Location of package manifests
schedule:
interval: "daily"
interval: 'daily'
ignore:
- dependency-name: "@types/node"
# Node.js types, ignore major updates since we don't want to use types for 22.x.x if we are using 20.x.x
update-types: ["version-update:semver-major"]
- dependency-name: '@types/node'
# Node.js types, ignore major updates since we don't want to use types for 22.x.x if we are using 20.x.x
update-types: ['version-update:semver-major']
13 changes: 9 additions & 4 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,19 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js ${{ matrix.node-version }} environment
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- name: Install dependencies
run: npm install
# - name: Run linter
# run: npm run lint
run: pnpm install --frozen-lockfile
- name: Run linter
run: pnpm run lint
- name: Create or update pull request
id: changesets
uses: changesets/action@v1
Expand All @@ -40,6 +45,6 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish
if: steps.changesets.outputs.hasChangesets == 'false'
run: npm run build
run: pnpm run build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
15 changes: 10 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,29 @@ jobs:
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js ${{ matrix.node-version }} environment
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- name: Install dependencies
run: npm install
# - name: Run linter
# run: npm run lint
run: pnpm install --frozen-lockfile
- name: Run linter
run: pnpm run lint
# - name: Run typecheck
# run: npm run typecheck
# run: pnpm run check-types
# - name: Identify misconfigurations and security anti-patterns
# uses: doyensec/electronegativity-action@v2
# - name: Upload report
# uses: github/codeql-action/upload-sarif@v1
# with:
# sarif_file: ../electronegativity_results
- name: Build
run: npm run build
run: pnpm run build
# Uncomment if necessary
# For example to inspect the build applications
- name: Upload artifact
Expand Down
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
pnpm-lock.yaml
routeTree.gen.ts
CHANGELOG.md
14 changes: 13 additions & 1 deletion .prettierrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,17 @@
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true
"bracketSpacing": true,
"importOrder": [
"<THIRD_PARTY_MODULES>",
"^@renderer/(.*)$",
"^@elek-io/(.*)$",
"^[./]"
],
"importOrderSeparation": true,
"plugins": [
"@trivago/prettier-plugin-sort-imports",
"prettier-plugin-tailwindcss"
],
"tailwindStylesheet": "./src/renderer/index.css"
}
7 changes: 6 additions & 1 deletion .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
{
"recommendations": ["dbaeumer.vscode-eslint", "bradlc.vscode-tailwindcss"]
"recommendations": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"github.vscode-github-actions",
"bradlc.vscode-tailwindcss"
]
}
5 changes: 1 addition & 4 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@
"**/routeTree.gen.ts": true
},
"editor.formatOnSave": true,
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "always"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"typescript.tsdk": "./node_modules/typescript/lib"
}
50 changes: 50 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# elek.io Client

> A modern, offline-first content management system (CMS) and digital asset manager (DAM).

[![Version](https://img.shields.io/badge/version-0.3.2-blue.svg)](https://github.com/elek-io/client/releases)
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg)](https://github.com/elek-io/client)
[![License](https://img.shields.io/badge/license-todo-red.svg)](LICENSE)

> [!IMPORTANT]
> elek.io Client is under active development and not yet ready for production usage! Feel free to check it out and make suggestions.

### Motivation

Traditional CMS solutions like WordPress need to be installed on a server, leading to costs for hosting it 24/7, security vulnerabilities by exposing the server to the internet, and the need to maintain / keep the server, database and CMS up to date.

elek.io Client solves these problems by being an offline-first desktop application that works entirely on your local machine, with optional remote synchronization.

### What Makes It Special

- **Offline-first**: Works entirely locally with optional remote synchronization
- **Cross-Platform**: Desktop apps for Windows, macOS, and Linux
- **Version Control**: Every Project is a Git repository with full version history
- **Easy backups & collaboration (optional)**: Synchronize to any Git hosting service (GitHub, GitLab, Bitbucket etc.) to work together with others and have a backup if needed
- **Multi-Language**: Built-in support for 25 languages
- **Structured Content**: Define custom content types (Collections) with field definitions
- **Developer-Friendly**: Local read-only OpenAPI REST API with optional typesafe TS/JS API Client generation and JSON file exports for programmatic access to your content e.g. to use with static site generators

## Installation

### Download

Download the latest version for your platform:

- **Windows**: [Download installer](https://github.com/elek-io/client/releases)
- **macOS**: [Download DMG](https://github.com/elek-io/client/releases)
- **Linux**: Download [AppImage](https://github.com/elek-io/client/releases) / [Snap](https://snapcraft.io/) / [DEB](https://github.com/elek-io/client/releases)

### System Requirements

Altough elek.io Client might run on older hard and software than listed below, the following is the recommended minimum:

- **Windows**: Windows 10 or later
- **macOS**: macOS 13.7.6 (Ventura) or later
- **Linux**: Ubuntu 22.04.5, or equivalent
- **RAM**: 4 GB minimum, 8 GB recommended
- **Disk Space**: 500 MB for elek.io Client + space for your Projects

## For Developers

For insight on how elek.io Client works, please refer to the [documentation folder](documentation/overview.md).
14 changes: 9 additions & 5 deletions components.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/renderer/src/index.css",
"css": "@renderer/index.css",
"baseColor": "zinc",
"cssVariables": false,
"cssVariables": true,
"prefix": ""
},
"iconLibrary": "lucide",
"aliases": {
"components": "@renderer/components",
"utils": "@renderer/util"
"utils": "@renderer/lib/utils",
"ui": "@renderer/components/ui",
"lib": "@renderer/lib",
"hooks": "@renderer/hooks"
},
"iconLibrary": "lucide"
"registries": {}
}
44 changes: 44 additions & 0 deletions documentation/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Developer Documentation

Welcome to the elek.io Client developer documentation. This guide will help you understand the codebase architecture and development patterns.

> [!NOTE]
> If your main interest is using Projects content inside your own applications, you can skip to the [Consuming Content Locally](./consuming-content-locally.md) section.

## Prerequisites

- Familiarity with TypeScript and React
- Basic understanding of Electron architecture
- Knowledge of React Hook Form and TanStack Query (helpful but not required)
- Understanding of Git and version control concepts

## Getting Started

**Start with [Overview](./overview.md)** to understand the application architecture, security model, and how the different processes communicate.

Then proceed to the specific topics based on your interests or contribution goals:

- **[Loading and Updating Data](./renderer/loading-and-updating-data.md)** - TanStack Query patterns for data fetching and mutations
- **[Dynamic Form Generation](./renderer/dynamic-form-field-generation.md)** - How user-defined forms work with field definitions
- **[Breadcrumb Navigation](./renderer/breadcrumb-navigation.md)** - Route-based breadcrumb system for hierarchical navigation

## Contributing

When updating these docs:

- Keep code examples up-to-date with actual implementation
- Include file references with line numbers where relevant
- Add practical examples for complex concepts
- Update the "Last Updated" date at the bottom of each document

## Additional Resources

- [Electron Documentation](https://www.electronjs.org/docs/latest)
- [TanStack Query Documentation](https://tanstack.com/query/latest)
- [React Hook Form Documentation](https://react-hook-form.com/get-started)
- [shadcn/ui Documentation](https://ui.shadcn.com/docs)
- [@elek-io/core Repository](https://github.com/elek-io/core)

---

**Last Updated:** 2025-12-04
Loading
Loading