Hi I'm Victor.
🛒 D-Bay
At first glance, this app may seem similar to my previous project, E-Harbour, which is reflected in the name. However, the focus of this project is quite different. In my previous project, I was responsible for the frontend. With this project, I took on the entire backend development myself, bringing a stronger emphasis on validation, handling edge cases, and route protection. Although I also worked on the frontend, I used EJS to keep the project a cohesive, server-side application. The backend was written with TypeScript, which is compiled by Render.com and dynamically changes the static paths for production so that same assets can be re-used by the nested JavaScript App.
During development, the password reset emails were configured to fire from my personal GMail to myself.
Unfortunately, during production, sending emails to external addresses is limited without a registered business.
During production this is skipped and the request redirects you directly to the link you would receive in an email.
This ia a demo app, as such you should only input dummy data.
Tech Stack
const techStack = {
frontend: ['EJS', 'SCSS'],
backend: ['Node', 'Express'],
libraries: ["bcryptjs", "connect-mongo", "dotenv", "express-session", "express-validator", "mongoose", "multer", "nodemailer", "stripe"],
deployment: 'Render',
};
About
- Sessions retain non-sensitive user submitted data on invalidated form submissions
- All routes protected from unauthorised access
- CSRF protection with custom middleware
- Multer configured to store then clean submitted files. This ensures users do not need to re-upload when validation fails
- First line express validator, backed up by final front mongoose validator, both fed back to user
- EJS follows React concept. A single template can handle several views.
- Dynamic GET routes ensure to render correct data based on data received
- STRIPE Demo [use 4242] handles checkout payments
💬 Geschwindigkeitsbegrenzung
While studying for my B2 German language course, an important theme was remembering which preposition pairs with which verb. In order to help me memorise them, I decided to make a quick time based game. My original plan was to have AI fill my database with sentences, however it did not quite generate the kind of ideas I had envisioned. Additionally, I saw that I am more likely to remember the question, than the verb-preposition pairings. As such I decided to develop a random sentence generator. The sentences have similar structures, and due to RNG will not be memorable, forcing you to focus on the verbs instead of the questions. Some of these sentences are unlikely to be heard in a typical German conversation, but do add a touch of humour and do a good job in remaining gramatically correct.
Tech Stack
const techStack = {
frontend: ['CSS', 'React', 'TypeScript'],
libraries: ['Framer-Motion', 'React Router', 'Font Awesome'],
deployment: 'Firebase',
};
About
- Difficulty select affects time remaining, score gained, lives & required score to get item
- Score based items allow user to pause timer
- Records high scores, along with difficulty tried
- Wordbook shows in game verbs, DAT/ACC cases, and Eng & Ru translations
- Sentence generator differentiates regular, irregular, reflex, separable & stative verbs
- Runs on desktop, but aimed at mobile. Alternate landscape/portrait layouts
- Clean, well-written custom hook handles all game logic
⚓ eHarbour
The original project that I collaborated on can be found here: comeGetMe. I wrote all of the Frontend using React & TypeScript. After completing the original project, I cloned my own version where I can manage my own DB & deployment.
Render's servers will hibernate after inactivity and may take a couple of minutes to wake up.
No requests are sent on the homepage, please navigate to any other route.
A page refresh might be needed if the server does not wake up.
Any images uploaded will be erased once the server sleeps.
Tech Stack
const techStack = {
frontend: ['SCSS', 'React', 'TypeScript'],
backend: ['Node', 'Express'],
libraries: {
react: ['React Router', 'React Helmet', 'Framer-Motion', 'Font Awesome'],
node: ['BSCrypt', 'CORS', 'DotENV', 'Express Validator', 'JSONWebToken', 'Mongoose', 'Multer', 'Socket.IO'],
},
database: 'MongoDB',
deployment: ['Vercel', 'Render'],
};
About
- 2-Man Team Project - I created all Frontend with React & TypeScript
- All elements animate to server responses
- Live Chat functionality
- All client requests handled by a modular and clean custom hook
- Original Backend ran Session authentication. I converted my version to JWT to escape 3rd party cookie limitations
- Great responsiveness on all devices. Used sticky nav but ensured it does not steal the page on high zoom
☄️ Andromeda
My first React Project after completing a course on Udemy.com. Project written in TypeScript and aims to cover your staple web development features such as cart logic, bookings & account management.
Tech Stack
const techStack = {
frontend: ['SCSS', 'React', 'TypeScript'],
libraries: ['React Router', 'Redux', 'Framer-Motion', 'React Helmet', 'React Datepicker', 'Faker', 'Font Awesome'],
deployment: 'Firebase',
};
About
- Covers Cart Logic, Bookings, User Account management
- Different Frontend styles for each Page: ensures each list offers something new
- Data storage managed with Redux & localStorage
- Custom react hook covers form validation, ensures booked dates cannot be re-used etc.
- Showcases some fun animations & interactive Solar System page using Framer Motion
🏰 CastleCarnage [CLI game]
With the aim to improve my general coding I wrote a CLI game in Ruby to run in the terminal. To run it, you must download the code from GH, ensure you have Ruby installed, head to root directory and run "ruby interface.rb"
Tech Stack
const techStack = {
language: 'ruby',
environment: 'terminal',
execution: 'ruby interface.rb',
};
🪙 TreasureKeeper [code only]
I'm sharing a couple of my earlier Le Wagon projects that were initially deployed by a contributor. While I won’t be revisiting or redeploying them, they were valuable learning experiences. Here are the GitHub links for a quick overview.
Tech Stack
const techStack = {
frontend: ['SCSS', 'Bootstrap'],
backend: 'Ruby on Rails',
database: 'PostgreSQL',
deployment: 'Heroku',
};
🚀 MySpaceShip [code only]
I'm sharing a couple of my earlier Le Wagon projects that were initially deployed by a contributor. While I won’t be revisiting or redeploying them, they were valuable learning experiences. Here are the GitHub links for a quick overview.
Tech Stack
const techStack = {
frontend: ['SCSS', 'Bootstrap'],
backend: 'Ruby on Rails',
database: 'PostgreSQL',
deployment: 'Heroku',
};