Skip to content

🌐 Just Another Link Shortener - simple link shortener made with React and GraphQL

Notifications You must be signed in to change notification settings

xwirkijowski/jals

Repository files navigation

Header

JALS / Just Another Link Shortener v2

A simple solution for shortening links built with React, Next.js and GraphQL with basic safety features. Initially designed and developed in 2021 as a personal challenge and to get some new experience.

I began work on a refactor in december 2024. Primary goal was to gain practical knowledge of current React (v19) and Next.js (v15) features, including the new App router. As a secondary goal, client application was to fully leverage TailwindCSS features and implement some subtle animations.

Now live! Development stage preview available at jals2.wirkijowski.dev

CircleCI

Technology stack

Client

  • React 19
  • Next.js 15 with App router
  • TypeScript
  • Apollo Client + experimental-nextjs-app-support
  • PostCSS
    • Tailwind-CSS
    • Autoprefixer
  • classnames
  • Motion (Framer Motion)
  • Eslint

API server

  • Apollo Server
  • GraphQL
    • @graphql-tools β€” schema loading and merging utilities
    • graphql-scalars β€” additional scalars (e.g. EmailAddress)
  • Redis & Redis OM β€” Redis client and ORM interface
  • Mongoose β€” ORM interface for MongoDB
  • Eudoros - logging utility
  • Luxon β€” date utilities
  • Resend β€” transactional emails
  • ulid β€” internal unique identifiers

Environment

  • Redis-Stack
  • MongoDB Community
  • Docker
  • CircleCI β€” deployment pipeline
  • Nginx β€” reverse proxy on remote

Observability

  • Sentry.io β€” error monitoring
  • Axiom β€” collection of telemetry data, errors and warnings

Functionality

Operational

  • Session management on both client and api
  • Auth code transactional emails
  • Short link creation
  • Redirection logic with safeguards
  • Link inspection (/inspect/[linkId] & /[linkId]/+)
  • Reporting functionality β€” link flagging
  • User-agent and address collection (@todo levarage User-Agent Client Hints API)
  • Light and dark themes

Planned & In-progress

  • Magic link functionality
  • Transitions, animations
  • Dashboards
  • Link management
  • User management
  • Client to API health checks
  • Full query error handling

Version 1 (2021)

See it in action! Production demo of v1 available at jals.wirkijowski.dev

Tech stack

  • Client
    • React β€” frontend framework
    • React Router β€” navigation
    • SCSS β€” CSS preprocessor
    • CSS Modules β€” styling approach
    • BEM β€” class naming methodology
    • Apollo Client β€” communication with API
  • API server
    • Apollo Server β€” GraphQL server
    • Mongoose β€” ORM interface for MongoDB
    • Ioredis β€” Redis client used for cache
    • Sentry.io β€” monitoring & error tracking
    • Dotenv β€” environment variables loader

Functionality

  • Functional link shortening
  • Link inspection using + as a modifier at the end of the URL
  • Collected data included user's platform, if is mobile device and timestamp of click
  • Users were redirected the moment a click is registered (positive response from API)
  • If a link is flagged multiple times, users were warned about it and asked to confirm before proceeding with the redirect.

No license is available.