Skip to content

Izume01/Reliq

Repository files navigation

Reliq — Share Secrets That Don't Overstay

Reliq is a secure platform for sharing sensitive messages and files that expire automatically.
Minimal accounts, no unnecessary complexity.
Designed for privacy-focused, temporary sharing.

Reliq Banner


Features

  • End-to-end encryption for all messages
  • Self-destructing links that auto-delete after viewing or upon expiration
  • One-time view: secrets are deleted after being accessed
  • Clean, minimal user interface
  • Optional password protection for added security
  • Fully responsive design for all devices
  • Account-based access for secret creation
  • Dedicated landing, login, signup, create, and dashboard pages
  • Expanded TTL presets (1 minute to 7 days)
  • Password brute-force lockout controls (max failed attempts)

Screenshots


Technology Stack

Layer Technology
Frontend Next.js 15, React 19, Tailwind CSS, TypeScript
Backend API Routes (Next.js)
Database PostgreSQL via Prisma ORM
Caching Redis (Upstash)
Auth Better Auth + email/password
ID Gen nanoid (8-character secure slugs)

Getting Started

Prerequisites

  • Node.js 18 or higher
  • PostgreSQL instance
  • Redis (e.g. Upstash)
  • pnpm (or npm)

Installation

  1. Clone the repository

    git clone <your-repo-url>
    cd serectsapp
  2. Install dependencies

    pnpm install
  3. Configure environment variables
    Create a .env.local file in the root directory:

    DATABASE_URL="postgresql://username:password@localhost:5432/secret_share"
    UPSTASH_REDIS_REST_URL="your-redis-url"
    UPSTASH_REDIS_REST_TOKEN="your-redis-token"
    BETTER_AUTH_SECRET="your-strong-random-secret"
    BETTER_AUTH_URL="http://localhost:3000"
  4. Set up the database

    pnpm prisma generate
    pnpm prisma migrate deploy
  5. Start the development server

    pnpm dev
  6. Open your browser and navigate to http://localhost:3000


Usage

Creating a Secret

  1. Visit the homepage
  2. Sign in or create an account
  3. Go to /create
  4. Enter your secret message
  5. Optionally set a password, expiry, and max failed attempts
  6. Click "Create Secret"
  7. Share the generated link with your recipient

Managing Secrets

  1. Open /dashboard
  2. Review active account-owned secrets and remaining TTL
  3. Copy links or revoke any secret instantly

Viewing a Secret

  1. Open the secret link
  2. If password protected, enter the password
  3. View the secret message
  4. The secret is deleted after viewing

Configuration

Environment Variables

Variable Description Required
DATABASE_URL PostgreSQL connection string Yes
UPSTASH_REDIS_REST_URL Redis REST API URL Yes
UPSTASH_REDIS_REST_TOKEN Redis REST API token Yes
BETTER_AUTH_SECRET Secret used to sign auth cookies/tokens Yes
BETTER_AUTH_URL Public app URL for auth callbacks/cookies Yes

Database Schema

The application uses Slug plus Better Auth tables:

  • User
  • Session
  • Account
  • Verification

Project Structure

serectsapp/
├── src/
│   ├── app/
│   │   ├── api/
│   │   │   ├── auth/           # Better Auth handlers
│   │   │   ├── create/         # Create secret endpoint
│   │   │   ├── getslug/        # Retrieve secret endpoint
│   │   │   ├── secrets/        # Account-owned secret management
│   │   ├── create/             # Secret creation workspace
│   │   ├── login/              # Sign-in page
│   │   ├── signup/             # Sign-up page
│   │   ├── dashboard/          # Secret management dashboard
│   │   ├── s/
│   │   │   └── [...slug]/
│   │   │       └── page.tsx    # Secret viewing page
│   │   ├── globals.css         # Global styles
│   │   ├── layout.tsx          # Root layout
│   │   └── page.tsx            # Homepage
│   ├── lib/
│   │   ├── primsa.ts           # Prisma client
│   │   └── redis.ts            # Redis client
│   └── util/                   # Utility functions
├── prisma/
│   └── schema.prisma           # Database schema
├── public/                     # Static assets
└── package.json

Security Features

  • Passwords are hashed using bcrypt with 12 salt rounds
  • Unique 8-character slugs generated with nanoid
  • One-time access: secrets are deleted after viewing
  • Automatic expiration using Redis TTL
  • Failed-password-attempt lockout with auto-destruction
  • No sensitive data is logged
  • Input validation and sanitization throughout

Deployment

Vercel (Recommended)

  1. Push your code to GitHub
  2. Connect your repository to Vercel
  3. Add environment variables in the Vercel dashboard
  4. Deploy

Other Platforms

The application can be deployed to any platform that supports Next.js, including:

  • Netlify
  • Railway
  • DigitalOcean App Platform
  • AWS Amplify

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-feature)
  3. Commit your changes (git commit -m 'Describe your feature')
  4. Push to your branch (git push origin feature/your-feature)
  5. Open a pull request

Support

If you encounter issues or have questions:

  1. Check the Issues page
  2. Create a new issue with detailed information
  3. Include your environment details and error messages

Roadmap

  • Rate limiting
  • File attachments
  • Custom domains
  • Analytics dashboard
  • API documentation
  • Mobile application

Built with Next.js, Prisma, and Redis.

About

Reliq is a lightweight, beautifully designed platform to share important, temporary, or sensitive files with an experience that feels personal, safe, and intentional.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors