Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
ce6064f
initial formatting
rhit-steineig Mar 21, 2026
62976fa
cleaned up inline css
rhit-steineig Mar 29, 2026
8897846
Fixed Bug where sub-items not affected by dialogs
maroisem Mar 31, 2026
4122412
Fixed bug where home suggestions didn't appear
maroisem Mar 31, 2026
0d6328f
Small fixes
maroisem Mar 31, 2026
b340120
branch name is shown on about page
rhit-steineig Apr 1, 2026
0aaf623
require confirmation on close for Create Item dialog
1FoxInTheBox1 Apr 4, 2026
4fce093
Update parent chain after edit
1FoxInTheBox1 Apr 5, 2026
f34f267
use local cache
rhit-steineig Apr 6, 2026
ffd800a
sync sveltekit before building
rhit-steineig Apr 6, 2026
30e8a45
update packages
rhit-steineig Apr 6, 2026
e526ebe
fix linting
rhit-steineig Apr 6, 2026
3dd4d28
Merge pull request #354 from AssetAtlasTracker/maroisem/fix-edit-sub-…
maroisem Apr 7, 2026
9b96568
Merge pull request #355 from AssetAtlasTracker/steineig/cleanup-inlin…
rhit-steineig Apr 7, 2026
8cb5f29
Merge pull request #357 from AssetAtlasTracker/steineig/branch-name-o…
rhit-steineig Apr 7, 2026
ada5e71
Merge branch 'main' into steineig/fix-compose-warnings
rhit-steineig Apr 7, 2026
743c76d
Merge pull request #360 from AssetAtlasTracker/steineig/fix-compose-w…
rhit-steineig Apr 7, 2026
7afb6d5
Added "pinned" field to basicItem + migration
maroisem Apr 7, 2026
42fc5f4
Added pinning to UI (rough draft)
maroisem Apr 7, 2026
2b1410f
fixed number 5 in #156
rhit-steineig Apr 20, 2026
8e5d0e1
Require confirmation even when using esc key
1FoxInTheBox1 Apr 21, 2026
28f17ab
token-based solution
1FoxInTheBox1 Apr 21, 2026
8595bbe
update child chains
1FoxInTheBox1 Apr 21, 2026
c9a94c6
reset scrolling in dialogs
1FoxInTheBox1 Apr 21, 2026
de53af0
Improved pinning UI
maroisem Apr 21, 2026
ef659c3
reduce duplication in src/routes/api/customFields/
rhit-steineig Apr 21, 2026
a4be20f
Merge pull request #359 from AssetAtlasTracker/ny/update-parent-chain
1FoxInTheBox1 Apr 21, 2026
7b14514
reduced duplication in src/routes/api/
rhit-steineig Apr 21, 2026
c76acba
Merge branch 'main' into steineig/reduce-routes-duplication
rhit-steineig Apr 21, 2026
fde35bc
should have been included in merge commit
rhit-steineig Apr 21, 2026
7b9c901
fixed tests
1FoxInTheBox1 Apr 21, 2026
6ec3c99
Fix escape key issues
1FoxInTheBox1 Apr 21, 2026
237b23f
Moved ConfiguringOauthProviders
maroisem Apr 22, 2026
9c7746e
fix dialog closing without confirmation
1FoxInTheBox1 Apr 22, 2026
5e218a0
Moved OauthDoc to docs folder
maroisem Apr 27, 2026
8ed4d05
Merge pull request #366 from AssetAtlasTracker/ny/reset-scrolling
1FoxInTheBox1 Apr 27, 2026
2dd8970
Merge branch 'main' into ny/require-close-confirmation
1FoxInTheBox1 Apr 27, 2026
27ba7b2
curse you linter
1FoxInTheBox1 Apr 27, 2026
79dadb8
Merge pull request #358 from AssetAtlasTracker/ny/require-close-confi…
1FoxInTheBox1 Apr 27, 2026
2981e71
refresh item windows after edits
1FoxInTheBox1 Apr 27, 2026
88814c0
Merge pull request #368 from AssetAtlasTracker/maroisem/move-oauth-md
maroisem Apr 28, 2026
1a99764
Added new sorting options
maroisem Apr 28, 2026
a7cfd24
Added new getLastUpdatedItem function
maroisem Apr 28, 2026
21513f3
Fixed issues + improved style
maroisem Apr 28, 2026
7c76cd6
additional refactoring
rhit-steineig Apr 29, 2026
5ef747c
reduced permission level checking duplication
rhit-steineig Apr 29, 2026
450d721
undo cspell changes
rhit-steineig Apr 29, 2026
55c84d5
Merge pull request #367 from AssetAtlasTracker/steineig/reduce-routes…
rhit-steineig Apr 29, 2026
068f49b
Merge branch 'main' into steineig/reduce-auth-duplication
rhit-steineig Apr 29, 2026
0076f29
New user readme (#370)
FaronAan Apr 30, 2026
24d415d
Visual upgrades
maroisem May 2, 2026
8d2424d
Merge branch 'main' into ny/refresh-item-windows
rhit-steineig May 3, 2026
43a0a66
reduced duplicated login logic
rhit-steineig May 3, 2026
2cf16a3
general auth cleanup
rhit-steineig May 3, 2026
8877da2
Update item windows on home page tree view
1FoxInTheBox1 May 4, 2026
8186e32
Merge pull request #372 from AssetAtlasTracker/ny/refresh-item-windows
1FoxInTheBox1 May 4, 2026
165f1bc
Merge pull request #369 from AssetAtlasTracker/maroisem/tree-view-pin
maroisem May 4, 2026
8be4916
Fixed spelling and updated cspell (#374)
rhit-steineig May 4, 2026
61cab98
home page item display area fits on screen
rhit-steineig May 3, 2026
6b5b3f9
reduced duplication in callback code
rhit-steineig May 4, 2026
711e950
Merge branch 'main' into steineig/reduce-auth-duplication
rhit-steineig May 4, 2026
51f5551
Merge pull request #384 from AssetAtlasTracker/steineig/reduce-auth-d…
rhit-steineig May 4, 2026
77dd8aa
Improved dimensions for sorting options box
maroisem Apr 28, 2026
7673937
Merge pull request #373 from AssetAtlasTracker/maroisem/extend-sortin…
maroisem May 5, 2026
16d38c1
Moved style to main.css
maroisem May 12, 2026
cf3b65e
Merge pull request #383 from AssetAtlasTracker/maroisem/show-last-edi…
maroisem May 12, 2026
c31956c
update docs for actions workflows
rhit-steineig May 12, 2026
0695c3f
add tusd to ghcr docker compose files
1FoxInTheBox1 May 19, 2026
0f3576a
fix prod containers
1FoxInTheBox1 May 19, 2026
0bca4de
Combine Dockerfiles
1FoxInTheBox1 May 19, 2026
4c13d4e
25-26 Retrospective (#386)
rhit-steineig May 19, 2026
00bb300
Merge pull request #387 from AssetAtlasTracker/ny/fix-prod-containers
1FoxInTheBox1 May 20, 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
16 changes: 16 additions & 0 deletions .github/assetatlas/docker-compose-ghcr-tailscale.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ services:
volumes:
- assetatlas-config:/usr/src/app/config
- assetatlas-tsbuild-cache:/usr/src/app/.tsbuildcache
- assetatlas-image-uploads:/usr/src/app/uploads
env_file: secrets.env
environment:
NODE_ENV: production
Expand Down Expand Up @@ -53,6 +54,19 @@ services:
restart: unless-stopped
network_mode: host

tusd:
image: tusproject/tusd:latest
command:
- "-upload-dir=/data"
- "-port=1080"
- "-verbose"
ports:
- "1080:1080"
volumes:
- assetatlas-image-uploads:/data
networks:
- default

networks:
assetatlas-network:
driver: bridge
Expand All @@ -67,3 +81,5 @@ volumes:
name: assetatlas-config
assetatlas-tailscale-state:
name: assetatlas-tailscale-state
assetatlas-image-uploads:
name: assetatlas-image-uploads
16 changes: 15 additions & 1 deletion .github/assetatlas/docker-compose-ghcr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ services:
image: ${DOCKER_IMAGE:-ghcr.io/assetatlastracker/assetatlas:latest}
pull_policy: always
volumes:
- assetatlas-config:/usr/src/app/config
- assetatlas-tsbuild-cache:/usr/src/app/.tsbuildcache
- assetatlas-image-uploads:/usr/src/app/uploads
env_file: secrets.env
environment:
NODE_ENV: production
Expand Down Expand Up @@ -37,6 +37,18 @@ services:
environment:
MONGO_URI: mongodb://mongo:27017/assetatlas_db

tusd:
image: tusproject/tusd:latest
command:
- "-upload-dir=/data"
- "-port=1080"
- "-verbose"
ports:
- "1080:1080"
volumes:
- assetatlas-image-uploads:/data
networks:
- default

networks:
assetatlas-network:
Expand All @@ -50,3 +62,5 @@ volumes:
name: assetatlas-tsbuild-cache
assetatlas-config:
name: assetatlas-config
assetatlas-image-uploads:
name: assetatlas-image-uploads
2 changes: 1 addition & 1 deletion .github/workflows/release-ghcr-files.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:

- README.md - Instructions for running the containers
- ConfiguringOauthProviders.md - Guide for setting up OAuth providers
- docker-compose-ghcr.yml - For runing locally
- docker-compose-ghcr.yml - For running locally
- docker-compose-ghcr-tailscale.yml - For running with Tailscale networking

You can download either the individual files or the complete ZIP archive.
38 changes: 38 additions & 0 deletions NEWUSERREADME.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# AssetAtlas

AssetAtlas is a self hosted inventory and asset management app that helps you organize, track, and manage everything you own. AssetAtlas gives you a clear, centralized view so you always know what you have and where it is, great for keeping track of items around the house or managing tools in a maker space. If this appeals to you, you can download the project [here](https://github.com/AssetAtlasTracker/AssetAtlas/releases/tag/ghcr-files-latest) or get started with development [here](https://github.com/AssetAtlasTracker/AssetAtlas/wiki/Getting-Started).

<p align="center">
<img src="images/AssetAtlasOverview.png" alt="Overview Screen"/>
</p>

## Simple to Use

AssetAtlas is designed with simplicity in mind, offering an intuitive interface where every screen has a clear purpose. Creating and managing items is quick and easy, so you can stay organized without the learning curve.
<p align="center">
<img src="images/AssetAtlasBlank.png" alt="Blank Overview Screen"/>
</p>

## Customizable to Your Needs

As mentioned above, AssetAtlas is designed to be easy from the start, with a simple setup that lets you begin tracking items as soon as you download and run the application. As your needs grow, AssetAtlas also offers customization features like templates and custom tags to help you tailor the experience and streamline your workflow.
<p align="center">
<img src="images/AssetAtlasNewItem.png" alt="Creating a New Item"/>
</p>

## Alternative Views and Location Tracking

AssetAtlas also offers an intuitive Tree View where you can visualize where your items are located as well as providing a structured, hierarchal view of your entire inventory. Since every item can be given a home location, you'll always be able to know where things belong and where they are now.
<p align="center">
<img src="images/AssetAtlasBottleMoved.png" alt="Tree View and Home Location"/>
</p>


## Secure and Password Free

AssetAtlas uses secure, password-free sign-in powered by trusted providers like Google and GitHub. That means no passwords to remember—and no sensitive credentials stored on our servers.

For added security and offline access, you can also enable authentication through a separate verification app.
<p align="center">
<img src="images/AssetAtlasLogin.png" alt="Login Screen"/>
</p>
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,4 @@ docker compose -f docker-compose-ghcr-tailscale.yml down

## Also

See [ConfiguringOauthProviders.md](./ConfiguringOauthProviders.md) for instructions on how to set up OAuth providers to allow users to log in and log out of their accounts
See [ConfiguringOauthProviders.md](./docs/ConfiguringOauthProviders.md) for instructions on how to set up OAuth providers to allow users to log in and log out of their accounts
21 changes: 21 additions & 0 deletions cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,34 @@
"language": "en",
// words - list of words to be always considered correct
"words": [
"assetatlas",
"buildx",
"columnspan",
"customfields",
"dbmdl",
"deleter",
"dropshadow",
"gridfs",
"hoverable",
"hovertiptext",
"keyuri",
"noscroll",
"oklch",
"otpauth",
"otplib",
"padx",
"pady",
"pycache",
"pyenv",
"qrcode",
"Recents",
"rollup",
"skeletonlabs",
"softprops",
"subcard",
"tailscalecompose",
"topbar",
"totp",
"vite"
],
// flagWords - list of words to be always considered incorrect
Expand Down
27 changes: 16 additions & 11 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,47 @@ RUN apk add --no-cache python3 make g++ iputils
# Set working directory
WORKDIR /usr/src/app

# Copy package files
COPY package.json package-lock.json* pnpm-lock.yaml* ./
# Copy lockfiles first for better cache utilization
COPY package*.json ./

# Install dependencies
# Install all dependencies (dev+prod) for build
RUN npm ci --silent || npm install --silent

# Copy source files
# Copy source and build
COPY . .

# Build the app
RUN npm run build

FROM node:22-alpine AS production

# Install OS dependencies for Alpine
# Install runtime OS dependencies
RUN apk add --no-cache python3 make g++ iputils

WORKDIR /usr/src/app
ENV NODE_ENV=production

# Copy package files
# Install only production deps
COPY package.json package-lock.json* pnpm-lock.yaml* ./
RUN npm ci --omit=dev --silent || npm install --omit=dev --silent
RUN npm install migrate-mongo --no-audit --no-fund --silent || true

# Copy built output from builder stage (SvelteKit outputs to 'build' not 'dist')
# Copy built artifacts from build stage
COPY --from=build /usr/src/app/build ./build
COPY --from=build /usr/src/app/static ./static
COPY --from=build /usr/src/app/package.json ./package.json
COPY --from=build /usr/src/app/docker/migrate-mongo-docker-config.cjs ./
COPY --from=build /usr/src/app/docker/migrations ./migrations

# Create uploads directory with proper permissions
RUN mkdir -p /usr/src/app/uploads && chown -R node:node /usr/src/app/uploads
# Copy entrypoint (keeps existing script name)
COPY docker/entrypoint-ghcr.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Ensure node user has ownership of the app directory and uploads
RUN mkdir -p /usr/src/app/uploads && chown -R node:node /usr/src/app

# Run as non-root
USER node

EXPOSE 3000

ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "build/index.js"]
50 changes: 0 additions & 50 deletions docker/Dockerfile.ghcr

This file was deleted.

2 changes: 0 additions & 2 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ services:
args:
APP_VERSION: ${APP_VERSION:-dev}
BUILDKIT_INLINE_CACHE: "1"
cache_from:
- assetatlas:latest
env_file: secrets.env
environment:
NODE_ENV: production
Expand Down
21 changes: 11 additions & 10 deletions docker/entrypoint-ghcr.sh
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
#!/bin/bash
#!/bin/sh
set -e

echo "Starting AssetAtlas..."
echo "Current working directory: $(pwd)"
echo "Running as user: $(id)"

# Set working directory
cd /usr/src/app
echo "Changed to: $(pwd)"
echo "Files in current dir: $(ls -la)"

# Create the .env file
mkdir -p /usr/src/app/docker
echo "IP=${IP:-localhost:3000}" > /usr/src/app/docker/.env
echo "Created .env file at /usr/src/app/docker/.env"

# Ensure proper ownership of files
if [ "$(id -u)" = "0" ]; then
chown -R node:node /usr/src/app
# If running as root, switch to node user to run the application
echo "Switching to node user..."
exec su -c '"$0" "$@"' node -- "$@"
else
exec "$@"
fi
# Run the command passed in
echo "Executing: $@"
exec "$@"
31 changes: 31 additions & 0 deletions docker/migrations/20260407143553-add_pinned_field.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module.exports = {
/**
* @param db {import('mongodb').Db}
* @param client {import('mongodb').MongoClient}
* @returns {Promise<void>}
*/
async up(db, client) {
// TODO write your migration here.
// See https://github.com/seppevs/migrate-mongo/#creating-a-new-migration-script
// Example:
// await db.collection('albums').updateOne({artist: 'The Beatles'}, {$set: {blacklisted: true}});
const basicItemsCollection = db.collection('basicitems');
await basicItemsCollection.updateMany(
{ pinned: { $exists: false } },
{ $set: { pinned: false } }
);
},

/**
* @param db {import('mongodb').Db}
* @param client {import('mongodb').MongoClient}
* @returns {Promise<void>}
*/
async down(db, client) {
const basicItemsCollection = db.collection('basicitems');
await basicItemsCollection.updateMany(
{ pinned: { $exists: true } },
{ $unset: { pinned: "" } }
);
}
};
Loading
Loading