Skip to content

shortyShorty

Self-hosted short links for Express + MongoDB: UTM builder, click analytics, React admin UI

js
import mongoose from 'mongoose';
import express from 'express';
import { createShorty } from '@jeffjassky/shorty';

await mongoose.connect(process.env.MONGO_URL);

const pkg = createShorty({
  connection: mongoose,
  resolveUser: (req) => req.session.user && {
    id: req.session.user._id,
    email: req.session.user.email,
    displayName: req.session.user.name,
    isAdmin: req.session.user.role === 'admin',
  },
});

const app = express();
app.use(express.json());

// Public
app.use('/api/shorty', requireAuth, pkg.routes);
app.use('/shorty',    requireAuth, pkg.ui({ mountPath: '/shorty' }));

// Admin โ€” separate guard, separate route
app.use('/api/shorty/admin', requireAuth, requireAdmin, pkg.adminRoutes);
app.use('/admin/shorty',    requireAuth, requireAdmin,
        pkg.adminUi({ mountPath: '/admin/shorty' }));

Released under the MIT License.