iine • small web appreciation

2 min read Original article ↗

simple appreciation|
for the small web

two lines of code. zero tracking. infinite appreciation

use cases

blog appreciation

quick anonymous feedback

how i built a privacy-first like button

a short story about building iine and why privacy matters on the web

docs helpfulness

feedback for your side-project's docs

installation guide

step-by-step instructions for setting up iine on your website

features

zero friction

add to any html or ssg in seconds. no account required

privacy first

no timestamps, no ips, no tracking. hosted in switzerland

free forever

for the small web. self-host for high traffic, please ♡

built-in security

privacy-respecting rate limiting and input validation

made with love

no data collection. just support for the indie web

setup

1

add the script

include this in your html, before the closing body tag

<script src="https://cdn.jsdelivr.net/gh/welpo/iine@main/iine.mini.js"></script>

2

add a button

drop this html wherever you want the button to appear

<button class="iine-button" aria-hidden="true"></button>

1

add the script

include this in your html, before the closing body tag

<script src="https://cdn.jsdelivr.net/gh/welpo/iine@main/iine.mini.js"></script>

2

add a button

⚠️ change value="/your-page" to your page's path (e.g. value="/blog")

<form action="https://vhiweeypifbwacashxjz.supabase.co/rest/v1/rpc/increment_hits?apikey=sb_publishable_EoB7MFJhCmb6PiAk-GPJ4w_PGhQ44Ru" method="post">
  <input type="hidden" name="page_slug" value="/your-page">
  <button type="submit" class="iine-button" aria-hidden="true">
    <noscript>❤️</noscript>
  </button>
</form>

customise your buttons

choose your icon

preview

<button
  class="iine-button"
  data-icon="heart"
  aria-hidden="true">
</button>
<button
  class="iine-button"
  data-icon="thumbs_up"
  aria-hidden="true">
</button>
<button
  class="iine-button"
  data-icon="upvote"
  aria-hidden="true">
</button>
<button
  class="iine-button"
  data-icon="🔥"
  aria-hidden="true">
</button>

css styling

.iine-button — main button element

.iine-button.clicked — added after click

.icon — icon container (svg or emoji)

.counter — number display

why iine?

core principles

  • privacy first: no ips, no tracking
  • cost effective: minimal data = low cost
  • free: as in freedom (AGPL) and gratis
  • light: minimal code, no dependencies
  • caring: built for the small web

the story

i'm Óscar, author of iine

i wanted simple engagement buttons for my blog and an excuse to build my first project w/ backend

for sustainability and privacy, iine does not store individual timestamps or user agents or ips. it's just counters that go up

hoping others in the indie web community might find it useful, i've made it free〜