Rania Benotman's Work | Contra
Work by Rania Benotman
Sign Up
Post a job
Sign Up
Log In
pro
Rania Benotman
Senior Flutter Developer | Full-stack, AI & Supabase
Message
Follow
$5k+
Earned
1x
Hired
5.00
Rating
66
Followers
Tripoli, Libya
Work
Posts
Reviews
Services
About
Tripoli, Libya
1
Briefly — AI Content Brief Generator (React + Express + Groq)
1
6
5
Excited to share some of the backend work I've been doing lately with Supabase! 🚀 Here's a look at what went into building a production-ready backend from scratch: 🗄️ Database Schema Design Designed a relational schema with multiple interconnected tables: profiles, notes, reminders, conflicts, and a dedicated user_keys table for encryption key management. Every table has proper foreign key relationships, timestamps, and nullable/non-nullable constraints enforced at the DB level. 🔒 Row Level Security (RLS) Every single table has RLS enabled with two policies: users can only access their own rows, and anonymous access is blocked entirely. No exceptions. Security is enforced at the database layer, not just the application layer. 🔑 Auth & Email Flows Set up Supabase Auth with email + OAuth support, including full PKCE flow for secure token exchange. Configured deep link redirects for email confirmation and password reset flows, all tested end to end. ⚡ Edge Functions Built and deployed multiple Supabase Edge Functions handling AI processing pipelines, including JWT validation at the top of every function before any processing begins. The OpenAI API key lives exclusively in Supabase secrets, never in the app or any config file. 🔄 Merge Pipeline Built a follow-up note merge pipeline as an Edge Function. New facts are appended to existing profiles, duplicates are detected and skipped, conflicts are logged, and resolved reminders are handled gracefully. 📦 Migrations All schema changes go through versioned migration files under source control. No manual dashboard changes. CI/CD triggers migrations automatically on merge to main. 🔐 Encryption Architecture Client-side AES-GCM encryption via CryptoKit. Plaintext never sits in the database. Encryption keys are stored in a dedicated RLS-scoped table, fetched after login, and held in memory only for the session duration. Still a lot more to share about this project. Excited to talk about it publicly when it launches! 👀
5
5
1.8K
2
NeptuneBlue AI SaaS — RAG · Multi-Tenant · FastAPI
2
19
3
Nava University — WordPress · Elementor · Figma
3
13
3
Neuronic — IoT Flutter Suite · BLE · 100% Test Coverage
3
13
2
Kinder Enterprise Campaign — PHP · TailwindCSS · AWS
2
5
2
Mamozon App — Flutter · iOS & Android · E-commerce
2
9
2
School Management ERP — Laravel · Zoom · HR & Finance
2
13
2
NeptuneBlue Corporate Website — React · PHP · WordPress
2
9
2
Alweqaya — B2B & B2C E-commerce · Flutter · RBAC
2
7
2
Mariam Assed's Digital Art Platform
2
13