This project started as I was looking for a way to showcase my creative and tech projects, while still building on the coding skills I had acquired during spring 2022 Le Wagon's bootcamp. Instead of going with a CMS or a static site generator, I went with a blank Rails app, and built a simple custom CMS on it, to CRUD objects. I believe this stack gives a lot of flexibility, and is a great way to practice my Rails skills.
-
TailwindCSS and StimulusJS for front-end
-
PostgreSQL for the database
-
Cloudinary for images hosting
-
Mailgun for the mail server
-
Active analytics for cookie-less traffic analytics
-
Heroku to host the app
-
New Relic to monitor the app
-
Cloudflare for DNS config and SSL certificate
-
AWS S3 to host
sitemap.xml
-
Clone the repo:
git clone git@github.com:John35961/portfolio.git
-
In
development
, the app uses the following environnement variables:
APEX
which resolves to the bare live domain, to generateproduction
URLs in the email template used when a new contact form is submitted. Useful to test emails locally with MailCatcher for instanceHOST
resolving tohttps://jeanguillet.com
, used to generate sitemap URLs' rootLOCALHOST
, IPV4's localhost (likely to be127.0.0.1
) for ActionMailer to work locallyCLOUDINARY_URL
, to use Cloudinary image hosting forProject
objects. You can get an API key by creating a free account (the key starts withcloudinary://
)NGROK_HOST
if you want to forward yourlocalhost:3000
on the web via ngrok. Make sure to excludehttps://
from the variable, and restart thedevelopment
server after setting it. This last variable is not mandatoryAWS_ACCESS_KEY_ID
andAWS_SECRET_ACCESS_KEY
, resolving to a given AWS IAM profileS3_BUCKET_NAME
, the name of the bucket hostingsitemap.xml
S3_REGION
, the AWS region in which the bucket was created
-
Run
bin/rails bundle
to install required gems indevelopment
-
Then go with
bin/rails tailwindcss:install
to initialize the tailwindcss-rails gem -
Create database and run migrations with
bin/rails db:setup
-
Finally, run the server with
bin/dev
-
Then visit http://localhost:3000
-
/projects
-
/projects/:id
whereid
is actuallyProject
's URL slug generated by friendly_id -
/dashboard
, protected route to the custom-made CMS dedicated to CRUDProject
objects, attach relevantSkill
and gallery images to them -
/analytics
, protected route to Active analytics dashboard
-
Project
, describing a project I've done, with attributes such as its GitHub URL, description, associated Youtube video or release date. A project can have manySkill
objects -
ProjectSkill
, association table betweenProject
andSkill
-
Skill
, describing my skills. Skills can live on their own, but they make more sense when linked to a project, therefore a skill can have manyProject
objects
Made with rails-erd