Welcome to my portfolio project! This is a dynamic, full-stack web application built using Elixir and Phoenix. It showcases my projects, skills, and provides a platform for visitors to get in touch with me. The application is designed to be easily customizable and deployable, making it an ideal starting point for developers looking to create their own online portfolio. You can see it in action at Tech Rationalist. Please note that this is a work in progress project, and I'm continuously improving and adding new features. ๐ผโจ๐ง
- Project Showcase: Display and manage your projects with ease. ๐
- Admin Dashboard: Secure admin interface for content management using the
live_admin
package. ๐ - Contact Form: Allow visitors to send you messages directly through the site. ๐ง
- Markdown Support: Write project descriptions using Markdown for rich formatting. โ๏ธ
- Live Updates: Utilizes Phoenix LiveView for real-time interactions. โก
- Easy Deployment: Configured for quick deployment on Fly.io. ๐
- UI Components: Built with Tailwind CSS (included with Phoenix) and daisyUI for a modern and clean UI. ๐จ
Ensure you have the following installed:
- Elixir: v1.14+ (download) ๐ง
- PostgreSQL: (download) ๐
- Node.js: v14.0+ (download) ๐ฉ
- Livebook: (optional, for enhanced development experience) ๐ [@https://livebook.dev]
Phoenix (v1.7+) will be installed as a dependency when you run mix setup
.
To start your Phoenix server:
- Install Node.js dependencies with
npm install
in theassets
directory. This is required to build Tailwind CSS and any UI libraries. ๐ฆ - Run
mix setup
to install and setup dependencies ๐ ๏ธ - Start Phoenix endpoint with
mix phx.server
or inside IEx withiex -S mix phx.server
๐
Now you can visit localhost:4000
from your browser. ๐
This application includes an admin interface for managing content and site administration. The admin functionality allows authorized users to:
- Manage projects displayed on the portfolio ๐
- Handle contact messages received through the site ๐ฌ
- Perform other administrative tasks as needed ๐ง
Admin access is restricted to authorized personnel only, ensuring the security and integrity of your portfolio content. ๐
This application uses a custom admin authentication system. Admin registration is not available through the web interface and should be done via the Elixir interactive shell (IEx) for security reasons. ๐
To create an admin account:
-
Start an IEx session with your application:
iex -S mix
For Livebook users:
a. Start Livebook by running:
livebook server
b. In a separate terminal, start an IEx session with a distributed node:
iex --name your_app@127.0.0.1 --cookie your_secret_cookie -S mix
c. In Livebook, connect to this node using the same name and cookie.
Note: Replace "your_app@127.0.0.1" with a unique name for your application node, and "your_secret_cookie" with a secure, random string. ๐ช
-
Create a new admin account:
Portfolio.Backoffice.register_admin(%{email: "admin@example.com", password: "your_secure_password"})
Replace "admin@example.com" and "your_secure_password" with your desired email and password. ๐ง๐
-
Admin login is available at
/admins/log_in
๐ช -
After logging in, you can access the admin dashboard at
/admin
๐ฅ๏ธ
Note: Ensure you create at least one admin account to manage the site. Keep the admin credentials secure and do not share them with unauthorized individuals. ๐
This project is configured for deployment on Fly.io. To deploy:
- Install the Fly CLI: https://fly.io/docs/hands-on/install-flyctl/ ๐ป
- Run
fly launch
in the project directory. This will create afly.toml
file customized for your deployment. ๐ซ - Deploy your application with
fly deploy
๐
Note: The fly.toml
file is gitignored as it contains deployment-specific details. ๐
When deploying with a custom domain, ensure that the PHX_HOST
environment variable is set correctly in your fly.toml
file.
I am working on exciting new features to enhance this portfolio project:
- Dedicated page to showcase technical skills and expertise
- Visual representation of skill proficiency levels
- Integrated blogging platform with Markdown support
- Tagging and categorization of blog posts
Stay tuned for these updates! ๐กโจ