আর্কিটেকচার
সিস্টেমের সারসংক্ষেপ
iOS app / agent client -> api.<domain> -> API Gateway -> Lambda backend -> Postgres
Web app -> app.<domain> -> CloudFront -> SPA
Browser and agent auth -> auth.<domain> -> API Gateway -> Auth Lambda -> Cognito
Apex fallback -> <domain> -> CloudFront redirect -> app.<domain>
মূলনীতি
app,apiওauth-এর জন্য আলাদা পাবলিক ডোমেইন- Postgres হলো ডেটার মূল উৎস
- iOS ক্লায়েন্ট অফলাইন-ফার্স্ট: লোকাল SQLite আর সঙ্গে সিঙ্ক
- ওয়েব অ্যাপ, iOS অ্যাপ আর বাইরের এজেন্টের ইন্টারফেস একই ওয়ার্কস্পেস মডেল ব্যবহার করে
- বাইরের এজেন্ট শুরু করে
GET https://api.nibomo.com/v1/থেকে
সমর্থিত ক্লায়েন্ট
app.nibomo.com-এ ওয়েব অ্যাপ- মূল রিপোজিটরিতে লোকাল SQLite স্টোরেজসহ iOS অ্যাপ
- Google Play-তে Android অ্যাপ
- ডিসকভারি, OTP দিয়ে প্রাথমিক অথেনটিকেশন আর
Authorization: ApiKey-এর মাধ্যমে বাইরের এজেন্ট ক্লায়েন্ট
ডেটা মডেল
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
ডেটা ফ্লো
ওয়েব
- ব্রাউজার
auth.<domain>-এর মাধ্যমে সাইন ইন করে। - ওয়েব অ্যাপ
api.<domain>থেকে ওয়ার্কস্পেসের ডেটা লোড করে। - AI চ্যাটের অনুরোধ
/chat/local-turnদিয়ে যায়। - পুনরালোচনা জমা দিলে লেখার সময়েই শিডিউলারের অবস্থা আপডেট হয়।
iOS
- iOS অ্যাপ প্রথমে লোকালি SQLite-এ লেখে।
- লোকাল পরিবর্তনগুলো একটি আউটবক্সে সারিতে রাখা হয়।
- সিঙ্ক
/v1/workspaces/{workspaceId}/sync/pushদিয়ে পরিবর্তন আপলোড করে। - সিঙ্ক
/v1/workspaces/{workspaceId}/sync/pullদিয়ে রিমোট আপডেট ডাউনলোড করে। - লোকাল ডেটাবেস পরিবর্তনগুলো প্রয়োগ করে আর সিঙ্ক কার্সর এগিয়ে নেয়।
বাইরের এজেন্ট
- এজেন্ট
GET /v1/দিয়ে শুরু করে। - OTP দিয়ে প্রাথমিক অথেনটিকেশন চলে
auth.<domain>-এ। - এজেন্ট একটি দীর্ঘমেয়াদি API কী পায়।
- এজেন্ট
/v1/agent/meলোড করে, ওয়ার্কস্পেসের তালিকা নেয়, দরকার হলে একটি বেছে নেয়, তারপর/v1/agent/sql/queryও/v1/agent/sql/executeব্যবহার করে।
শিডিউলিং
Nibomo পুনরালোচনার শিডিউলার হিসেবে FSRS ব্যবহার করে।
বাস্তবায়নের নোট:
- ব্যাকএন্ড আর iOS-এ FSRS-এর হুবহু মেলানো দুটি বাস্তবায়ন রাখা হয়
- ওয়েব অ্যাপ শিডিউলিংয়ের ডেটা কন্ট্র্যাক্ট হুবহু মেনে চলে, কিন্তু শিডিউলারের তৃতীয় কোনো কপি রাখে না
- ওয়ার্কস্পেস-স্তরের শিডিউলার সেটিংসে আছে কাঙ্ক্ষিত রিটেনশন, শেখার ধাপ, পুনরায় শেখার ধাপ, সর্বোচ্চ ব্যবধান আর ফাজ
- পুনরালোচনার আসল সময় আসে
reviewedAtClientথেকে
বিস্তারিত কন্ট্র্যাক্টের জন্য মূল রিপোজিটরিতে FSRS শিডিউলিং লজিক দেখুন।
অথেনটিকেশন
- Cognito দিয়ে ইমেইল OTP
- হোস্ট করা ওয়েব অ্যাপের জন্য শেয়ার করা ডোমেইনের ব্রাউজার সেশন কুকি
auth.<domain>-এ এজেন্টের OTP দিয়ে প্রাথমিক অথেনটিকেশন, যার ফল একটি দীর্ঘমেয়াদি ApiKey- লোকাল ডেভেলপমেন্টের জন্য
AUTH_MODE=none - প্রোডাকশনের মতো অথেনটিকেশনের জন্য
AUTH_MODE=cognito
ডিপ্লয়মেন্টের কাঠামো
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda ব্যাকএন্ডauth.<domain>-> API Gateway + Lambda অথেনটিকেশন সার্ভিস- AWS RDS-এ Postgres
অ্যাপেক্স ডোমেইন আলাদা একটি মার্কেটিং সাইটে থাকতে পারে। প্রাথমিক সেটআপের সময় সেটি অব্যবহৃত থাকলে ইনফ্রাস্ট্রাকচার সাময়িকভাবে সেটিকে app.<domain>-এ রিডাইরেক্ট করতে পারে।