Add ActiveRecord, customer dashboard, separate DB architecture

- Re-enable ActiveRecord pointing at Neon Postgres
- Add Customer model with stripe_customer_id, email, slug, status
- Add dashboard controller and Apple ID-style device view
- Redirect checkout success to /dashboard
- Webhook now calls /instances, parses response, creates Customer in Rails DB
- Add MIT License

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Andrew Gundersen 2026-02-26 23:51:50 -05:00
commit fd2d498141
16 changed files with 199 additions and 89 deletions

View file

@ -4,7 +4,7 @@ require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
# require "active_job/railtie"
# require "active_record/railtie"
require "active_record/railtie"
# require "active_storage/engine"
require "action_controller/railtie"
# require "action_mailer/railtie"

View file

@ -1,84 +1,14 @@
# PostgreSQL. Versions 9.3 and up are supported.
#
# Install the pg driver:
# gem install pg
# On macOS with Homebrew:
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem "pg"
#
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
url: <%= ENV["DATABASE_URL"] %>
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: website_development
# The specified database role being used to connect to postgres.
# To create additional roles in postgres see `$ createuser --help`.
# When left blank, postgres will use the default role. This is
# the same name as the operating system user running Rails.
#username: website
# The password associated with the postgres role (username).
#password:
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
#host: localhost
# The TCP port the server listens on. Defaults to 5432.
# If your server runs on a different port number, change accordingly.
#port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# Defaults to warning.
#min_messages: notice
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: website_test
# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password or a full connection URL as an environment
# variable when you boot the app. For example:
#
# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
#
# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
# production:
# url: <%= ENV["MY_APP_DATABASE_URL"] %>
#
# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full overview on how database connection configuration can be specified.
#
production:
<<: *default
database: website_production
username: website
password: <%= ENV["WEBSITE_DATABASE_PASSWORD"] %>

View file

@ -43,10 +43,10 @@ Rails.application.configure do
config.active_support.disallowed_deprecation_warnings = []
# Raise an error on page load if there are pending migrations.
# config.active_record.migration_error = :page_load
config.active_record.migration_error = :page_load
# Highlight code that triggered database queries in logs.
# config.active_record.verbose_query_logs = true
config.active_record.verbose_query_logs = true
# Raises error for missing translations.

View file

@ -61,7 +61,7 @@ Rails.application.configure do
config.active_support.report_deprecations = false
# Do not dump schema after migrations.
# config.active_record.dump_schema_after_migration = false
config.active_record.dump_schema_after_migration = false
# Enable DNS rebinding protection and other `Host` header attacks.
# config.hosts = [

View file

@ -2,6 +2,7 @@ Rails.application.routes.draw do
root "pages#home"
get "/pricing", to: "pages#pricing"
get "/success", to: "pages#success"
get "/dashboard", to: "dashboard#show"
post "/checkout/create_session", to: "checkout#create_session"
post "/checkout/webhook", to: "checkout#webhook"