Skip to content

Latest commit

 

History

70 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Raindrop.io Public Pages

Public pages for collections and user profiles, served at https://<username>.raindrop.page.

Stack

  • Vike + vike-react (React 19, SSR)
  • Vike's built-in +server (universal-deploy, Node) + Hono via @vikejs/hono
  • Vite 8, Sass, vite-plugin-svgr
  • Data comes from https://api.raindrop.io/v2 via the built-in fetch

Scripts

npm run local        # dev server (vike dev)
npm run build        # production build → dist/
npm run start        # node dist/server/index.mjs
npm run preview      # build + start
npm run deploy:prod  # force-push master → release/production

Deploy

DigitalOcean App Platform, Node.js buildpack (no Dockerfile). Deploy is triggered by pushing to release/production (npm run deploy:prod). Node version is pinned in package.jsonengines.

App Platform sits behind Cloudflare, so:

  • responses with Cache-Control: public are cached at the edge (pages: 20s, embeds: 60s, oembed/feed: 1h)
  • static assets in __pages_assets__/ are hashed and served with max-age=31536000, immutable
  • compression is done by the edge, so it is disabled in Node (static served via srvx/static with compress: false)

Structure

src/
  pages/            Vike pages (+route, +data, +Page, +headersResponse per route)
    collection/     view, search, share, embed, empty-slug (redirect to slugged URL)
    user/           home, share, embed
    _app/ _error/
    +onBeforeRoute  maps <username>.raindrop.page/... → /<username>/...
    +config.js      vike config
    +server.js      Hono entry: /api/oembed, /<slug>-<id>/feed, then Vike handler;
                    also serves dist/client with immutable cache headers (prod only)
  server/           handlers for oembed and rss feed
  api/              api.raindrop.io client (collection(s), raindrops, filters, user)
  co/               React components
  modules/          helpers (format, router, async, browser)
  config/           endpoints, links, constants
  public/           copied to dist/client root (favicon etc), see vite.config.js publicDir
  assets/           icons

Routing

Subdomain is the username: rustem.raindrop.page/design-123 is routed internally as /rustem/design-123. Raw # in search URLs is user error, legacy redirects were removed on purpose.

About

Raindrop.io Public Pages

Resources

Stars

67 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages