- Notifications
You must be signed in to change notification settings - Fork26
Intelligent content moderation at scale
License
antiwork/iffy
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Intelligent content moderation at scale. Keep unwanted content off your platform without managing a team of moderators.
Features:
- Moderation Dashboard: View and manage all content moderation activity from a single place.
- User Lifecycle: Automatically suspend users with flagged content (and handle automatic compliance when moderated content is removed).
- Appeals Management: Handle user appeals efficiently through email notifications and a user-friendly web form.
- Powerful Rules & Presets: Create rules to automatically moderate content based on your unique business needs.
You may self-host Iffy Community for free, if your business has less than 1 million USD total revenue in the prior tax year, and less than 10 million USD GMV (Gross Merchandise Value). For more details, see theIffy Community License 1.0.
Here are the differences between the managed, hostedIffy Cloud and the free Iffy Community version.
Iffy Cloud | Iffy Community | |
---|---|---|
Infrastructure | Easy setup. We manage everything. | You set up a server and dependent services. You are responsible for installation, maintenance, upgrades, uptime, security, and service costs. |
Rules/Presets | 9 powerful presets: Adult content, Spam, Harassment, Non-fiat currency, Weapon components, Government services, Gambling, IPTV, and Phishing | 2 basic presets: Adult content and Spam |
Install postgres with a usernamepostgres
and passwordpostgres
brew install postgresqlbrew services start postgresqlcreatedbpsql -c"CREATE USER postgres WITH LOGIN SUPERUSER PASSWORD 'postgres';"
Install dependencies:
npm i
Copy.env.example
to.env.local
.
Generate aFIELD_ENCRYPTION_KEY
:
npx @47ng/cloak generate| head -1| cut -d':' -f2| tr -d' *'
Generate aSECRET_KEY
:
openssl rand -base64 32
Clerk
- Go toclerk.com and create a new app.
- Name the app anddisable all login methods except Email.
- Under "Configure > Email, phone, username", limit authentication strategies to "Email verification link" and "Email verification code". Turn on "Personal information > Name"
- Under "Configure > Restrictions", turn on "Sign-up mode > Restricted"
- Under "Configure > Organization Management", turn on "Enable organizations"
- Under "Configure > API Keys", add
CLERK_SECRET_KEY
andNEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
to your.env.local
file. - Under "Organizations", create a new organization and add your email to the "Members" list.
- Add the organization ID to your
.env.local
file asSEED_CLERK_ORGANIZATION_ID
. - (Optional, for testing) In the Clerk dashboard, disable the "Require the same device and browser" setting to ensure tests with Mailosaur work properly.
OpenAI
- Create an account atopenai.com.
- Create a new API key atplatform.openai.com/api-keys.
- Add the API key to your
.env.local
file asOPENAI_API_KEY
.
Resend (Optional, for email notifications)
In order to send email with Iffy, you will additionally need a Resend API key.
- Create an account atresend.com.
- Create and verify a new domain. Add the desired from email (e.g.
no-reply@iffy.com
) to your.env.local
file asRESEND_FROM_EMAIL
. - Add the desired from name (e.g.
Iffy
) to your.env.local
file asRESEND_FROM_NAME
. - Create a new API key atAPI Keys.
- Add the API key to your
.env.local
file asRESEND_API_KEY
.
Shortest (Optional, for testing)
In order to write and run natural language AI tests withShortest, you will additionally need an Anthropic API key and a Mailosaur API key.
- Create an account atanthropic.com.
- Create a new API key atAccount Settings.
- Add the API key to your
.env.local
file asSHORTEST_ANTHROPIC_API_KEY
. - Create an account atmailosaur.com.
- Create a new Inbox/Server.
- Go toAPI Keys and create a standard key.
- Update the environment variables:
MAILOSAUR_API_KEY
: Your API keyMAILOSAUR_SERVER_ID
: Your server ID
Set up the database, run migrations, and seed data:
createdb iffy_developmentnpm run dev:db:setup
Run the development server:
npm run dev
Openhttp://localhost:3000 to access the app.
To run asynchronous jobs, you will need to set up a local Inngest server. In a separate terminal, run:
npm run dev:inngest
Start the development server
npm run dev
Start the local Inngest server (for asynchronous jobs)
npm run dev:inngest
Run API (unit) tests
npm runtest
Run app (end-to-end) tests
npm run shortestnpm run shortest -- --no-cache# with arguments
About
Intelligent content moderation at scale