This site is not mobile-ready, please visit it on desktop.

Rafiq Ramadan

WebDev • Fullstack Engineer
Chicago, IL

WebDev • Fullstack Engineer
Chicago, IL

Argent Badge
Contact
Software Dev
github

Rafiq Ramadan

WebDev • Fullstack Engineer
Chicago, IL

WebDev • Fullstack Engineer
Chicago, IL

Argent Badge
Contact
Software Dev
github

✨🐍 About

HE/HIM
LGBT
Eastern Chicago

Most of the good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.
― Linus Torvalds

Top 5 login

🎢 🟒 Top Five Spotify

Spotify API Data Visualizer

This is a hobby project built from the ground up to practice using ReactJS, as well as integrating with a public API

Goal: To display the user's Top 5 Spotify data in a visually-appealing manner, easily screenshotted for posting online or sharing with friends

"Top Five Spotify" uses the following technologies:
  • ReactJS
  • Axios
  • ExpressJS
  • NodeJS
  • React Bootstrap

For more detailed information, feel free to visit the Github Repository πŸ‘‰, or expand the accordion below πŸ‘‡

Top Five Spotify is an asynchronous frontend app that uses the spotify API to fetch a user's top 5 artists and tracks for each of the three timeranges allowed by the API

The use-flow of the app is as follows:

  1. User clicks "login to Spotify"
  2. App sends an authorization code request to Spotify with the client ID and requested scopes
  3. User is redirected to Spotify's website to sign in, and allow the app to access specific data in their account
  4. Spotify redirects back to TopFiveSpotify with an authorization code
  5. Code is caught by custom useAuth hook to route through the express server to request an auth token from Spotify through a separate endpoint
  6. If successful, app will refresh, and user will see the full app page with their data already loaded


Features of Interest

TopFiveSpotify was designed with responsiveness in mind

Using React Bootstrap's breakpoints, the app will shift into the following vertical format:

mobile view

There are a total of 7 calls to the Spotify API after auth. The Get User Profile, and the Get Users Top Artists and Tracks endpoints 3 times each (hitting all three timeframe parameters)
This app loads all 7 at once in a Promise chain and stores the data in the client's localstorage

mobile view
mobile view

Problem: Due to changes to Spotify's API rate quota, my app will not work with anyone not explicitly added to my developer whitelist, and will return a 403 error if an endpoint call is made after authentication

Solution: Catching the HTML error and displaying demo data for the user instead, along with an alert banner notifying them of the circumstance

Demo Mode

Demo Mode Modal

An API that isn't comprehensible isn't usable.
― James Gosling

πŸ“πŸ’» Three.js Personal Site

A Test of Vanilla(ish) WebDesign

Inspired by websites featuring Three.js 3D models and animations, I decided to rebuild my ancient personal site from the ground up. And the site you're reading this on is the result!

Goal: To try out Three.js and especially to test my vanilla web design knowledge
Aside from Three.js, this website was built with zero external packages

Some examples of modern HTML and CSS tricks/techniques I learned or improved my knowledge of in this site's design:

  • pseudo-selectors
  • Clamp() Resizing
  • CSS Filter() Effects
  • Smooth Scroll
  • Grid + Flexbox Positioning

For more detailed information, feel free to visit the Github Repository πŸ‘‰, or expand the accordion below πŸ‘‡

This site is a simple static portfolio/resume site with a complex dynamic <canvas> background element, powered by Three.js. While the general idea of the site was planned from the start, the layout has evolved over time

As a hobbyist digital artist, it's important to me that a site showcasing my portfolio is also something worth being proud of from both a tehcnical and creative standpoint

Outline of the structure of the site:

  • Three.js-generated dynamic background on a <canvas> element
  • 12-column grid <main> element organizing alternating template <section> containers
  • Custom designed link and button elements for internal & external navigation
  • Mixture of hobby and professional content


Features of Interest

The main draw of the project: the 3D object-filled background. After choosing a coffee and Synthwave theme, the only remaining tasks were to find appropriate models and generate the javascript needed

renderer.js
Challenges:

Aside from the expected challenges of learning a new framework/package, I ran into quite a few technical barriers that required some clever solutions

Changing background size: Out of the box, a generated Three.js canvas will not adjust to a user changing the viewport size
Ultimately the best solution I managed to create was allowing the canvas to stretch with resizing. Not perfect, but much better than a harsh cut-off showing the plain color element behind the canvas

renderer.js

Controlling Bean Randomization: The coffee bean "starfield" at the top of the page is generated with some controlled randomization. Truly random spawning logic caused some issues with beans clipping into one another, or floating directly in the viewport camera

With some trial and error, I eventually crafted a randomization function that cut out a range of X and Z axis coordinates, to disallow bad bean placement. I also created somewhat-randomized spin logic, to avoid them from looking truly cloned

renderer.js

Additional Challenges:

  • Plotting out the camera movement mapped to page scroll
  • Sizing and lighting 3D models
  • Scaling canvas to device size
  • Creating a smooth animation loop

Informed by my 508 compliance professional work, I opted for a high-contrast site from the outset πŸ”…πŸ”†

Pure white and black squares would make for a stark and unfriendly site, but rounding the corners, adding some transparency to the black, and a slight box-shadow glow made a world of a difference β¬œβ¬›

There is much more that could be done, especially within the content displays. But the main goal was to create a cohesive design without any jarring jumps or changes πŸ‘β­•

Some custom JS scripts and CSS tricks were needed to improve functionality:

  • πŸ“‹ Copy-to-clipboard script
  • πŸ’¬ Custom pseudo-selector tooltips
  • βš“ Smooth-scroll anchors
  • ⬆ Scroll-to-top button hiding logic
  • ↕ Custom-built accordion components
Top 5 login πŸ‘‡πŸ‘ Top 5 login

Wrex

πŸ“§ 🌐 Contact

I am currently looking for long-term frontend or full-stack development employment, so please feel free to reach out if you have an opportunity that you think may be a good fit for me

I can be contacted on either LinkedIn or by Email (preferred), and am available by phone most afternoons

Email ramadanrafi@gmail.comClipboard
LinkedIn Rafiq RamadanClipboard
Phone Number +1 636-328-2955Clipboard

My personal philosophy would be: don't whine, don't let opportunities pass you by, be willing to work hard, and remember that you don't know as much as you think you do, ever.
― James Marsters

β˜•β€οΈβ€πŸ”₯ Specialty Coffee

Beyond just "a drink to wake me up in the morning," I'm passionate about specialty third-wave coffee
There's a lot to it, so feel free to ask about it if you contact me! I love learning about the coffee scenes in other cities 😁

Quick Info πŸ€“

Coffee Ristretto

Don't invest in an espresso machine at home unless you want a new hobby.
― James Hoffmann

Coffee Keyboard

πŸ’»πŸš§ Mechanical Keyboard Modding

The classic "let me look up how to fix this thing" into full-fledged hobby story

During the pandemic, I discovered the appeal of building and modifying mechanical keyboards. There's a certain joy to getting the visual and auditory aesthetics *just right*

Quick Info πŸ€“

  • Best Switch: C3 Tangerine aeropress
  • Layout: 65%aeropress
  • Typing Speed:150 WPMaeropress

I'm a software developer. My keyboard is one of my most important tools...why shouldn't I customize it?