Rafiq Ramadan
WebDev • Fullstack Engineer
Chicago, IL
WebDev • Fullstack Engineer
Chicago, IL
β¨π About
I'm Rafiq, a 31 year-old software developer originally from St. Louis, currently living in Chicago π
with my bearded dragon, Wrex π¦
I studied biology 𧬠and religious studies π in university, but found my passion (and career) in
coding and design β¨
With 7+ years of professional devlopment experience, I've built everything from backend automation software, to robust REST API integration, to full-fledged javascript framework front-end websites
I'm also a creative hobbyist who dabbles in building mechanical keyboards π οΈ, digital illustration π¨, frontend web-design π», specialty coffee βοΈ, and many other things
If you want to know more about any of the things I'm working on, feel free to ask or check out the links here π
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 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:
- User clicks "login to Spotify"
- App sends an authorization code request to Spotify with the client ID and requested scopes
- User is redirected to Spotify's website to sign in, and allow the app to access specific data in their account
- Spotify redirects back to TopFiveSpotify with an authorization code
- Code is caught by custom useAuth hook to route through the express server to request an auth token from Spotify through a separate endpoint
- 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:
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
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
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
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
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
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
π§ π 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
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 π€
- Brew Method: Aeropress
- Favorite Roaster: Proud Mary
- Preferred Process:Yellow Honey
Don't invest in an espresso machine at home unless you want a new hobby.
β James Hoffmann
π»π§ 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
- Layout: 65%
- Typing Speed:150 WPM
I'm a software developer. My keyboard is one of my most important tools...why shouldn't I customize it?