https://github.com/welpo/iine
simple likes for the small/indie web
https://github.com/welpo/iine
indie-web indieweb kudos like-button privacy self-hosted small-web
Last synced: 5 months ago
JSON representation
simple likes for the small/indie web
- Host: GitHub
- URL: https://github.com/welpo/iine
- Owner: welpo
- License: agpl-3.0
- Created: 2025-07-20T20:55:52.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-07-27T21:20:26.000Z (6 months ago)
- Last Synced: 2025-09-01T15:51:50.538Z (5 months ago)
- Topics: indie-web, indieweb, kudos, like-button, privacy, self-hosted, small-web
- Language: HTML
- Homepage: https://iine.to
- Size: 163 KB
- Stars: 4
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: COPYING
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
appreciation buttons for your blog, digital garden, portfolio… no account required. no user tracking
### [see the live demo and docs →](https://iine.to)
## quick start
### 1. add the script
```html
```
### 2. add the button
```html
```
that's it! your button will automatically display a heart icon and show the current count
> [!TIP]
> if you use a content security policy (CSP), you'll need to allow scripts from `cdn.jsdelivr.net` and connections to `*.supabase.co`
## features
- no ips, timestamps, or tracking data processed/stored
- pure vanilla javascript, ~3KB minified
- built-in icons (heart, thumbs_up, upvote) + custom emoji
- accessible: semantic html, aria attributes, keyboard navigation
- free (at least until i reach over 100,000 websites; then i may need to ask for donations)
- rate limiting and input validation
- [customisable](https://iine.to#customise)
- [self-hostable](./self-hosting.md)
- [agpl licensed](./COPYING)
## customization
### choose your icon
see the built in svgs @ [iine.to](https://iine.to#customise) or use any emoji:
```html
```
### custom page identifier
to add multiple buttons on the same page:
```html
```
### style with css
buttons without styling can look ugly. iine does not inject any css, so you'll have to add your own
here's a good starting point:
```css
.iine-button {
display: inline-flex;
align-items: center;
gap: 5px;
margin: 0;
padding: 0;
font-size: inherit;
line-height: inherit;
cursor: pointer;
border: none;
background: transparent;
color: inherit;
.icon {
display: inline-flex;
align-items: center;
}
&:focus {
outline: 2px solid currentColor;
outline-offset: 2px;
}
}
```
available css classes:
- `.iine-button` — main button element
- `.iine-button.clicked` — added after user clicks. use it to style clicked state or to add animations
- `.icon` — icon container (svg or emoji)
- `.counter` — number display
### accessibility
iine buttons are built to be accessible, including keyboard navigation, screen reader support, and focus management.
for screen readers, iine automatically generates `aria-label`s based on the icon and button state. you can set custom labels using the `aria-label` attribute:
```html
```
## self-hosting
you can run **iine** on your own Supabase instance/PostgreSQL setup. see the [self-hosting guide](./self-hosting.md)
## how it works
1. client clicks button → javascript sends request to Supabase
2. server validates → checks rate limits, domain, and input
3. counter increments → simple integer increment
4. display updates → new count shows immediately (optimistic update; reverts if server fails)
no user identification, no behavioural tracking, no analytics. just counters that go up
## contributing
something not working? have an idea? let me know!
- questions or ideas → [start a discussion](https://github.com/welpo/iine/discussions)
- found a bug? → [report it here](https://github.com/welpo/iine/issues/new?&labels=bug)
- feature request? → [let me know](https://github.com/welpo/iine/issues/new?&labels=feature)
## license
**iine** is free software: you can redistribute it and/or modify it under the terms of the [GNU Affero General Public License as published by the Free Software Foundation](./COPYING), either version 3 of the license, or (at your option) any later version