Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
675b840
add .ruby-version file with Ruby version 4.0.6
wilbert Sep 9, 2026
adb6b6f
Add custom error pages and assets
wilbert Sep 9, 2026
8a790f2
Add initial database schema file
wilbert Sep 9, 2026
4396bd7
chore: initialize project with TypeScript, Vite, and RSpec setup
wilbert Sep 9, 2026
027b80e
feat: implement user authentication with password reset functionality
wilbert Sep 9, 2026
afea0cb
feat: update database schema with users and sessions tables
wilbert Sep 9, 2026
466f3d3
feat: add new gems for spreadsheet parsing, testing, and environment …
wilbert Sep 9, 2026
1f76565
feat: configure SimpleCov for test coverage and ignore coverage reports
wilbert Sep 9, 2026
e6cb9e6
feat: update SimpleCov configuration and add Capybara Playwright support
wilbert Sep 9, 2026
a44548c
Rename database config to sample template
wilbert Sep 9, 2026
d62908c
feat: update cable configuration, add active record encryption, and c…
wilbert Sep 9, 2026
962b013
feat: update database schema and add profile fields to users
wilbert Sep 9, 2026
8655266
feat: add Active Storage validations and enhance User model with avat…
wilbert Sep 9, 2026
8b99e6d
feat: implement user authentication with session management and passw…
wilbert Sep 9, 2026
15d6c8b
feat: update authentication error messages and implement authorizatio…
wilbert Sep 9, 2026
e7d065d
feat: implement role validation to prevent demotion of the last admin…
wilbert Sep 9, 2026
e041e05
feat: add pagy gem for pagination support and configure inertia_rails…
wilbert Sep 9, 2026
bcdf604
feat: set up home page with Inertia and create corresponding routes
wilbert Sep 9, 2026
42e9be7
feat: add UserSerializer and corresponding specs for user serialization
wilbert Sep 9, 2026
77ecfac
feat: implement UserSearch query class with filtering, sorting, and p…
wilbert Sep 9, 2026
5481f95
feat: implement UsersController with CRUD actions and authorization f…
wilbert Sep 9, 2026
1a1c8be
feat: add UserRolesController with role update functionality and corr…
wilbert Sep 9, 2026
daa0c13
feat: enhance ProfilesController with complete CRUD actions and corre…
wilbert Sep 9, 2026
3113693
feat: implement RegistrationsController with user registration functi…
wilbert Sep 9, 2026
7022084
feat: remove unused profile view template
wilbert Sep 9, 2026
a2aee6d
feat: add password length validation and rate limiting for user regis…
wilbert Sep 9, 2026
7fdda30
Merge pull request #1 from wilbert/feat/front
wilbert Sep 9, 2026
92f8ea3
Merge branch 'master' of https://github.com/wilbert/Fullstack-Develop…
wilbert Sep 9, 2026
4e1e69f
feat: implement AppLayout with navigation and flash message handling
wilbert Sep 9, 2026
fcec61a
feat: add user management components and types for filtering and sorting
wilbert Sep 9, 2026
1eeb384
feat: add Field and UserForm components for user input handling
wilbert Sep 9, 2026
ae772ff
feat: add Edit page for user management with UserForm integration
wilbert Sep 9, 2026
b2b7846
feat: add ProfileEdit page with user account management features
wilbert Sep 9, 2026
285b0e0
feat: specify Ruby version 4.0.6 in Gemfile and Gemfile.lock
wilbert Sep 9, 2026
7573078
feat: add user detail pages with profile and admin views
wilbert Sep 9, 2026
62b75b4
Merge pull request #2 from wilbert/feat/react-files
wilbert Sep 9, 2026
c575299
feat: update CI configuration, enhance test setup, and upgrade depend…
wilbert Sep 9, 2026
4a23c2a
feat: implement dashboard stats query and corresponding tests
wilbert Sep 9, 2026
043c25a
feat: implement dashboard stats broadcasting and related tests
wilbert Sep 9, 2026
86dc29e
feat: refactor BroadcastJob to include stats expiration before broadc…
wilbert Sep 9, 2026
c93edea
feat: streamline dashboard stats broadcasting logic in User model
wilbert Sep 9, 2026
5e5d87e
feat: refactor connection logic to streamline user verification and a…
wilbert Sep 9, 2026
1a137f3
feat: remove StatsChannel and add @rails/actioncable dependency
wilbert Sep 9, 2026
802c9f3
feat: add DashboardChannel with subscription logic and related specs
wilbert Sep 9, 2026
3c7696d
feat: implement admin dashboard with stats display and related specs
wilbert Sep 9, 2026
14133c7
feat: implement useDashboardStream hook for real-time stats updates a…
wilbert Sep 9, 2026
bccd15c
feat: add StatCard component for displaying statistics and update Das…
wilbert Sep 9, 2026
63a1269
feat: update Dashboard component layout and enhance stats display wit…
wilbert Sep 9, 2026
cc3fc30
Merge pull request #3 from wilbert/feat/admin-dashboard
wilbert Sep 9, 2026
b0f0f6e
feat: add imports table with relevant fields and indexes for import t…
wilbert Sep 10, 2026
9c50611
feat: implement Import model with validations, associations, and file…
wilbert Sep 10, 2026
cc618b6
feat: add UserRow model with header normalization, validations, and s…
wilbert Sep 10, 2026
8744acb
feat: implement CsvRowSet and SpreadsheetRowSet classes for handling …
wilbert Sep 10, 2026
3ec333a
feat: update UserForm to use remote_avatar_url and enhance form submi…
wilbert Sep 10, 2026
2181528
feat: add initializer for RubyZip configuration to manage date warnin…
wilbert Sep 10, 2026
6d6d04c
feat: add tests for Imports::UserImporter to validate user creation, …
wilbert Sep 10, 2026
c83459d
feat: implement suppression mechanism for dashboard broadcasts and ad…
wilbert Sep 10, 2026
9a3039a
feat: update production queue configuration to define dispatchers and…
wilbert Sep 10, 2026
ac73f3f
feat: implement ImportChannel and ProgressBroadcaster for real-time i…
wilbert Sep 10, 2026
e2ff952
feat: add admin imports management with CRUD actions, serializers, an…
wilbert Sep 10, 2026
62af1ed
feat: implement user import functionality with UI components, status …
wilbert Sep 10, 2026
e6c216a
Merge pull request #4 from wilbert/feat/spreadsheet-import
wilbert Sep 10, 2026
6ad5d63
feat: enhance responsive design and PWA support with layout adjustmen…
wilbert Sep 10, 2026
e1a9682
feat: update CSS imports for Tailwind compatibility and adjust user r…
wilbert Sep 10, 2026
dd5c045
Merge pull request #5 from wilbert/feat/layout
wilbert Sep 10, 2026
a1f1fd8
feat: implement user registration and enhance home page with authenti…
wilbert Sep 10, 2026
d0a5fc5
feat: update Dockerfile and .dockerignore for improved build process …
wilbert Sep 10, 2026
da34bbc
feat: refactor deployment configuration and add local development set…
wilbert Sep 10, 2026
7aeb526
feat: update CI configuration, enhance RuboCop settings, and add Pret…
wilbert Sep 10, 2026
db165c2
feat: update database configuration, adjust Puma port, and add Docker…
wilbert Sep 10, 2026
ce9a688
feat: update Puma port and Docker Compose configuration for consisten…
wilbert Sep 10, 2026
089b17c
feat: update environment settings for development and adjust database…
wilbert Sep 10, 2026
c2a5133
feat: add faker gem for development and testing
wilbert Sep 10, 2026
79aa767
Merge pull request #6 from wilbert/feat/deployment
wilbert Sep 10, 2026
0365273
feat: update SSH configuration in local deployment settings
wilbert Sep 10, 2026
34d24d7
feat: add comprehensive development setup documentation with Docker C…
wilbert Sep 10, 2026
1f7011e
feat: add AI usage disclosure document outlining AI tools and their a…
wilbert Sep 10, 2026
3fba879
feat: update Ruby version to 4.0.6 in CI configuration
wilbert Sep 10, 2026
98e50b3
feat: add Kamal deployment status documentation outlining deployment …
wilbert Sep 10, 2026
b1b04f8
feat: remove unused files and clean up project structure
wilbert Sep 11, 2026
158d282
Implement client-side form validation and improve UI consistency
wilbert Sep 11, 2026
d19db94
feat: remove unused Vite build step from CI and update documentation …
wilbert Sep 11, 2026
87878c1
feat: update README.md to reflect project requirements and AI policy,…
wilbert Sep 11, 2026
3a0ab05
fix: update database password default and correct test database name
wilbert Sep 11, 2026
3f42098
fix: correct test database name in configuration
wilbert Sep 11, 2026
ed8919b
Bump Node to 26.8.2 and modernize CI/CodeQL
wilbert Sep 11, 2026
2ea82cd
Add Inertia SSR, locale hooks, JIT profiling
wilbert Sep 11, 2026
fd477e5
Standardize Ruby and RSpec formatting
wilbert Sep 11, 2026
b7172bc
Refactor specs for RSpec lint compliance
wilbert Sep 11, 2026
c9b1af8
Merge pull request #7 from wilbert/wilbert-ribeiro-dev
wilbert Sep 14, 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
65 changes: 65 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files.

# Ignore git directory.
/.git/
/.gitignore

# Ignore bundler config.
/.bundle
/vendor/bundle

# Ignore all environment files.
/.env*

# Ignore all default key files.
/config/master.key
/config/credentials/*.key

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/.keep

# Ignore storage (uploaded files in development and any SQLite databases).
/storage/*
!/storage/.keep
/tmp/storage/*
!/tmp/storage/.keep

# Ignore assets.
/node_modules/
/app/assets/builds/*
!/app/assets/builds/.keep
/public/assets
# Vite output (vite, vite-dev, vite-test, vite-ssr, ...) is rebuilt inside the image.
/public/vite*

# Ignore test suite and its artifacts.
/spec
/coverage
/test-results
/playwright-report

# Ignore CI service files.
/.github

# Ignore Kamal files.
/config/deploy*.yml
/.kamal

# Ignore development files
/.devcontainer
/.vscode
/.idea

# Ignore Docker-related files
/.dockerignore
/Dockerfile*

# Ignore OS cruft.
.DS_Store
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# See https://git-scm.com/docs/gitattributes for more about git attribute files.

# Mark the database schema as having been generated.
db/schema.rb linguist-generated

# Mark any vendored files as having been vendored.
vendor/* linguist-vendored
config/credentials/*.yml.enc diff=rails_credentials
config/credentials.yml.enc diff=rails_credentials
12 changes: 12 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 2
updates:
- package-ecosystem: bundler
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10
53 changes: 53 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]

jobs:
ci:
runs-on: ubuntu-latest

services:
postgres:
image: postgres:17
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports: ["5432:5432"]
options: >-
--health-cmd pg_isready --health-interval 10s
--health-timeout 5s --health-retries 5

env:
RAILS_ENV: test
DATABASE_URL: postgres://postgres:postgres@localhost:5432

steps:
- uses: actions/checkout@v7

- uses: ruby/setup-ruby@v1
with:
ruby-version: 4.0.6
bundler-cache: true

- uses: actions/setup-node@v7
with:
node-version-file: .nvmrc
cache: npm

- run: npm ci
- run: npx playwright install --with-deps chromium

- run: bin/rails parallel:create parallel:load_schema

- run: bundle exec rubocop
- run: bundle exec brakeman --quiet --no-pager --exit-on-warn
- run: bundle exec bundler-audit check --update
- run: npm run typecheck
- run: npm run format
- run: bundle exec parallel_rspec

- uses: actions/upload-artifact@v7
if: always()
with:
name: coverage
path: coverage/
61 changes: 24 additions & 37 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,44 +8,31 @@ on:

jobs:
CodeQL-Build:

runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2

# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
# Override language selection by uncommenting this and choosing your languages
# with:
# languages: go, javascript, csharp, python, cpp, java

# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# The default GITHUB_TOKEN is read-only; uploading results needs security-events: write.
permissions:
actions: read
contents: read
security-events: write

# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
strategy:
fail-fast: false
matrix:
# All interpreted, so nothing needs to be built before analysis.
language: [actions, javascript-typescript, ruby]

# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language

#- run: |
# make bootstrap
# make release

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
steps:
- name: Checkout repository
uses: actions/checkout@v7

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: none

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
56 changes: 56 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# Temporary files generated by your text editor or operating system
# belong in git's global ignore instead:
# `$XDG_CONFIG_HOME/git/ignore` or `~/.config/git/ignore`

# Ignore bundler config.
/.bundle

# Ignore all environment files.
/.env*

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/
!/tmp/pids/.keep

# Ignore storage (uploaded files in development and any SQLite databases).
/storage/*
!/storage/.keep
/tmp/storage/*
!/tmp/storage/
!/tmp/storage/.keep

/public/assets

# Ignore key files for decrypting credentials and more.
/config/*.key
/config/credentials/*.key


/app/assets/builds/*
!/app/assets/builds/.keep

# Vite Ruby
/public/vite*
node_modules
# Vite uses dotenv and suggests to ignore local-only env files. See
# https://vitejs.dev/guide/env-and-mode.html#env-files
*.local

# Ignore SimpleCov coverage reports.
/coverage/

# Ignore Playwright traces and reports from browser specs.
/test-results/
/playwright-report/

# SSH key for the local Kamal test server (.kamal/local).
/.kamal/local/ssh/
3 changes: 3 additions & 0 deletions .kamal/hooks/docker-setup.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env sh

echo "Docker set up on $KAMAL_HOSTS..."
3 changes: 3 additions & 0 deletions .kamal/hooks/post-app-boot.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env sh

echo "Booted app version $KAMAL_VERSION on $KAMAL_HOSTS..."
14 changes: 14 additions & 0 deletions .kamal/hooks/post-deploy.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env sh

# A sample post-deploy hook
#
# These environment variables are available:
# KAMAL_RECORDED_AT
# KAMAL_PERFORMER
# KAMAL_VERSION
# KAMAL_HOSTS
# KAMAL_ROLES (if set)
# KAMAL_DESTINATION (if set)
# KAMAL_RUNTIME

echo "$KAMAL_PERFORMER deployed $KAMAL_VERSION to $KAMAL_DESTINATION in $KAMAL_RUNTIME seconds"
3 changes: 3 additions & 0 deletions .kamal/hooks/post-proxy-reboot.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env sh

echo "Rebooted kamal-proxy on $KAMAL_HOSTS"
3 changes: 3 additions & 0 deletions .kamal/hooks/pre-app-boot.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/usr/bin/env sh

echo "Booting app version $KAMAL_VERSION on $KAMAL_HOSTS..."
51 changes: 51 additions & 0 deletions .kamal/hooks/pre-build.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/env sh

# A sample pre-build hook
#
# Checks:
# 1. We have a clean checkout
# 2. A remote is configured
# 3. The branch has been pushed to the remote
# 4. The version we are deploying matches the remote
#
# These environment variables are available:
# KAMAL_RECORDED_AT
# KAMAL_PERFORMER
# KAMAL_VERSION
# KAMAL_HOSTS
# KAMAL_ROLES (if set)
# KAMAL_DESTINATION (if set)

if [ -n "$(git status --porcelain)" ]; then
echo "Git checkout is not clean, aborting..." >&2
git status --porcelain >&2
exit 1
fi

first_remote=$(git remote)

if [ -z "$first_remote" ]; then
echo "No git remote set, aborting..." >&2
exit 1
fi

current_branch=$(git branch --show-current)

if [ -z "$current_branch" ]; then
echo "Not on a git branch, aborting..." >&2
exit 1
fi

remote_head=$(git ls-remote $first_remote --tags $current_branch | cut -f1)

if [ -z "$remote_head" ]; then
echo "Branch not pushed to remote, aborting..." >&2
exit 1
fi

if [ "$KAMAL_VERSION" != "$remote_head" ]; then
echo "Version ($KAMAL_VERSION) does not match remote HEAD ($remote_head), aborting..." >&2
exit 1
fi

exit 0
Loading