Follow what changed in Saksı Kampüs, release by release.
Live sessions open for joining five minutes before their scheduled start and instructors can now open group sessions for their own classes; tutor earnings can be read per tutor, the package and feature management lists search and filter on the server, the users page can be narrowed by course management package and tutor match and sorted by remaining credit, the blog management search no longer reloads the page on every keystroke, blog images are centred in both the article and the editor, and the "All" tab was dropped from the group lesson category tabs on the pricing page.
A session can be joined five minutes before its scheduled start. The preparation window is there to sort out connection, microphone and camera before the lesson begins: the session detail counts down to the moment the join button opens, and once the window is on it says the meeting is open and when the lesson itself starts. Only the door moves early — the lesson keeps its calendar time, its billed duration, its credit reservation and its tutor earning.
Instructors can create group sessions for their own class matches. The class-session gate turned instructors away before the create permission ever ran, so a tutor could not book a session even for their own class. Instructor roles now pass that gate and the ownership check is left to the create permission, which still denies another tutor’s match; the session selector shows instructors the class tab, scoped to their own matches.
The tutor earnings list can also be read per tutor. A switch next to the filters flips between a "By Tutor" view, which folds every match of a tutor into a single row over the same filters, and the existing match view. Opening a tutor row lists every lesson that tutor earned with a student/class column, and offers a shortcut into that tutor’s matches.
The package and feature management lists gained search and filters. Packages can be searched by name, title or ID and narrowed by exam type, package type and category; features can be searched by name, description or ID and narrowed by type. Search and filtering run on the server, so the result count and the paging follow them. The package list is also ordered by the display order set on the package form, so the admin panel and the pricing page agree on the order.
Credit granted by an admin is labelled as a manual grant instead of a purchase in the credit ledger. An admin-assigned package adds credit through the same movement type a sale does, so the ledger reported a purchase for minutes nobody paid for.
The "All" tab is gone from the group lesson category tabs on the pricing page. The tabs now open on the first subject category and each tab lists only the packages of its own subject; when the exam type or the sub-tab changes, the selection moves to the first category present in the new list. The tabs only appear when there is more than one category, so a group package carrying no category still shows where the tabs are hidden, but not while they are on.
The students tab on the users page gained two more filters and sorting by remaining credit. Next to the existing credit filter, toggles narrow the list to students with an active course management package and to students with a tutor match, and the "Remaining Credit" header became a three-state sort control. Both the filters and the sort run on the server, so the total count and the paging follow them.
Typing in the blog management search no longer looks like the page is reloading. Every keystroke opened its own request, and the request armed the full-screen loading overlay. The search now sends one request once typing settles, a slow broad search no longer overwrites a faster narrow one, changing the search returns to the first page, and existing results stay on screen between requests, only dimmed.
A new category name in the blog tag selector can contain spaces. The field sits inside a popover whose trigger read every typed space as "toggle me" and swallowed it, so a multi-word category could not be typed at all.
Images inside a blog post are centred in both the published article and the editor. An image with no alignment of its own used to sit flush left; an alignment the author picks on purpose still wins.
The website gained a mentorship page and per-course AP, IB and SAT detail pages; the pricing page moved to a list and detail layout with hand-ordered packages, invoice and payment e-mails now also reach the student’s guardians, the booking confirmation lists every lesson with its date and length, the users page can be filtered to students holding lesson credit, and the guardian onboarding forms now explain their errors.
The website gained a Mentorship page and per-course AP, IB and SAT detail pages. The mentorship page walks through the programme’s modules, profile building and the mentors; the request form has a mentorship mode with grade options and files the request as a mentorship lead. The consultancy and mentorship links are grouped under one dropdown in the top bar. The AP, IB and SAT course cards now link to a detail page per course; IB History was added, and Mathematics AA, Mathematics AI and ESS were dropped from the IB grid. The course pages show parent testimonials, and the achievements page gained stats, admissions and exam result blocks with a photo per university.
Editing a blog post now stamps its updated date.
The booking confirmation lists exactly what is about to be booked. Alongside the lesson count and the total duration, the dialog shows every selected lesson grouped by day with its date, weekday, time range and length, so a lesson landing on the wrong day is caught before booking. For staff and guardians booking on a student’s behalf, the credit warning now says whose credit is spent.
The students tab on the users page can be narrowed to students holding lesson credit. A toggle next to the curriculum filter keeps only students with an active credit that still has minutes left; the filter runs on the server, so the total count and the paging follow it.
The order packages appear in on the pricing page can be set from the admin panel. The package form gained an order field; a lower number comes first, and the order is only compared with packages sharing the same exam type and tab, so SAT packages never compete with IB ones, nor one-to-one lessons with group lessons. The form previews where the number places the package within its group as it is typed.
Invoice and payment e-mails reach the student’s approved guardians as well as the student. Students registered by a guardian have no mailbox of their own and carry an undeliverable placeholder address, on which the invoice mail failed and marked the invoice as failed. Placeholder addresses are now dropped from the recipient list and the document reaches the guardian. On the Paraşüt side individual buyers are no longer matched by identity number, so a record sharing that number can no longer pull the invoice onto the wrong contact; the buyer’s name, address and phone are refreshed on every sale, so someone who has moved is not invoiced at their old address. A rejected access token is renewed instead of failing every call.
The pricing page moved from a fixed-height card grid to a package list on the left with the selected package’s detail on the right. The cards shared a single height, so packages with long content overflowed while short ones left large gaps. The list now stays compact and the selected package is shown in full.
The summary and table totals on the tutor earnings page are labelled as gross earnings.
A deleted account no longer empties the notification list. Deleting a user is a soft delete, so their recipient row outlived the account, and a row that resolves to no user brought the organization’s whole notification list down with it. Deleted accounts are now dropped from the recipient list.
The detailed report of an assessment that tracks no points leaves the score card out. A completed attempt on an assessment whose questions carry no points stored a score of 0, and the report showed a meaningless "Total Score 0" next to a healthy accuracy. When the points configured on the questions total zero the card is omitted and the summary spreads into the freed space.
The link-student and new-student steps of guardian onboarding show the error instead of disabling the submit button. A short username or password used to grey the button out silently; the field now explains itself on submit. The link step also gained the e-mail format check it never had.
Live sessions can be booked into a slot that has already started, called off while under way and held for review when the student never showed; website requests are pushed to Zoho CRM, blog posts can carry links, the billing form explains its errors, and the app pages lay out properly on phones and tablets.
A slot that has already started can be booked for another 15 minutes. A last-minute lesson agreed at 09:03 could not be opened for the 09:00 slot, since the picker dropped every hour whose start had passed. The slot now stays bookable for 15 minutes after it starts, keeping its nominal range (09:00-10:30) and its full credit reservation, and the same rule applies to reschedules. The Zoom meeting for an imminent lesson is created on the spot, so the first join link no longer comes up empty. A started slot is badged in the picker, and a range whose end has already passed cannot be booked at all.
A lesson that is already under way can be called off. A lesson entered as 60 minutes instead of 90 is usually noticed only after it starts, and from that moment there was no way out: an ongoing session accepted no change request, and the only remaining action was completing it at the wrong duration and billing the student. Privileged staff and the session’s own tutor can now cancel an ongoing lesson with a reason; the student’s reserved credit is released, no tutor earning is written, the live Zoom meeting is ended and the attendance record is closed cleanly. The lesson can be re-created with the right duration in the same slot. A tutor’s own cancel and reschedule requests are approved without the 12-hour approval window, but both now require a reason; students and guardians keep the window and the late-cancellation penalty. A cancellation notice can also reach the organization’s decision makers on request.
One-to-one lessons the tutor attended alone are held for coordinator review. Finalization looked only at whether the tutor showed up, so a tutor who stepped into the room and left closed the lesson as completed: the student lost their credit and the tutor earned a full payout for a lesson nobody taught. A one-to-one lesson the tutor attended with no student present now lands in a "Student No-Show" status, and the reservation and the earning wait until a person decides. Admins, organization admins and coordinators either complete it, which settles the credit as usual, or mark it as not held, which releases the credit. The organization’s decision makers are notified when a lesson enters the queue, and it shows with a red alert icon in the list and calendar and an orange status badge on the detail page. Group lessons are exempt.
Tutors can upload images (JPG, PNG, WEBP) alongside PDFs as lesson material.
Reschedule requests now show the schedule they replace. Approving a reschedule overwrote the session in place, so the old slot was gone the moment the request was decided and the history could only show the proposed side. The session’s current schedule is captured when a request is opened, and for admins, organization admins and coordinators the request banner and the request history on the session page render old and new side by side, with the requester’s role spelled out. The history runs newest first, and labels that fell back to Turkish in the English UI were fixed.
A closed join link says why it is closed. Instead of one generic refusal, the too-early, ended, cancelled, completed and not-held cases each show their own message naming the lesson schedule.
A mismatch in the credit ledger no longer strands a session. A session whose reservation did not match its duration could not be finalized at all: the credit consume failed, the transaction rolled back, the session stayed ongoing, and the worker retrying every minute swallowed the error, so no alert was raised and no tutor earning was written; manual completion hit the same guard. Finalization now settles what the credit actually holds and completes the session regardless, and the unapplied minutes are reported to operations instead of being taken out of the student’s balance. Sessions that cannot be finalized now raise an alert.
Blog posts can carry hyperlinks. The editor toolbar gained a link button; links default to nofollow, which can be dropped from the dialog for links back into the site. An address entered without a protocol, like "example.com", no longer resolves relative to the current page. The reading page and the editor now share one typography, where a link used to be indistinguishable from body text.
Lesson requests from the website are pushed to Zoho CRM as leads. The push runs from a background queue, the form’s answers are mapped onto their own CRM fields rather than one description blob, and the picked countries always arrive in Turkish. When the CRM credentials are missing the push is skipped and the request is still stored.
The country picker on consultancy requests was fixed and now takes several countries. The country was stored as the label the visitor’s page had rendered and read back as a translation key, so every request that picked Other and every request from the English site showed a raw key on the lesson requests screen. Countries are stored as codes now and translated at render time, and the existing rows were converted back from both languages’ labels. The contact page, the consultancy page, the in-app dialog and the admin edit screen share one country list, where four private copies had drifted apart.
The pay button says why the billing form blocks payment. The button stayed disabled until the form was valid, and the field errors were only rendered on submit, so buyers were left with a dead button and no hint about the bad field. The button is clickable now: submitting renders the errors, scrolls to the first one and blocks the charge, and the profile billing tab behaves the same way. Any 11-digit identity number is accepted: the TCKN checksum is no longer required, which also removed a bug that rejected genuinely valid numbers; the VKN checksum stays. A billing profile that loads after the buyer started typing no longer overwrites what they entered.
Adding a subscription to a student who already has one names the package and the status of the existing subscription instead of failing with an unknown error, and suggests editing that subscription.
The x axis of the metrics chart labels the previous period’s dates as well. Each tick carries the selected period’s bucket on top and the previous period’s bucket in parentheses below it, so the dashed reference line names the days it covers, and the tooltip repeats both.
Sign out always signs out. When the session was already gone server-side (an expired token, a sign-out elsewhere) or the request was dropped, the click did nothing beyond a misleading "please sign in" toast. The teardown and the redirect no longer depend on the server’s answer.
The app pages lay out properly on phones and tablets. The student and guardian dashboards carried a fixed-width side column, which squeezed the main column to a few pixels on a phone and turned every card into a sliver; on a tablet the same squeeze came back once the sidebar appeared, with a session card measuring 40 pixels. The installment options on the checkout page pushed the page sideways, and the card number field could not fit a full 19-digit number. The dashboards now measure their own box rather than the viewport, the checkout stacks on a phone, and the top bar on the notifications page no longer runs off-screen below 1280 pixels. Desktop rendering is unchanged.
Switching the language no longer leaves the sidebar on the old one; it used to take a second toggle before the menu followed.
Twin question generation picks the subject profile from the curriculum path. A path like "AP > Biology > Chemistry of Life" was searched as one flat string, so the word "chemistry" in the unit sent an AP Biology run down the chemistry profile: the biology-specific transformation rules never ran and the twins read like rewordings of the originals. The path is now walked from root to leaf, the course above the unit decides, and the glossary is picked along the same path.
AI now detects the questions in an interactive PDF, the back office gained a twin-question generation agent, a credit ledger and a metrics page, fixes landed across exam timing, availability and the payment listings, and the app pages got markedly faster.
Questions in the interactive PDF editor are now detected by AI. The "Generate with AI" step on the toolbar takes a page range, the elements to place on the page and the difficulty, pool and topic defaults for the questions it will create; the editor stays read-only while the scan runs. What comes back is a draft: nothing is written to the question bank, every question is framed where it was read, and a preview button in its corner shows the text, the choices and the answer that would be saved. The report lists every detected question next to the answer it carries, and for books that do not print their answers on the page, the answer key is applied to the draft. Approving saves only the questions whose answer is known; the rest stay in the draft until an answer is supplied. Discarding a draft only ever discards what was never saved — nothing an approval wrote is undone — and the same question is never created twice across runs.
Paging and totals were fixed on the course, unit and lesson listings. The organization’s own content, the user’s subscription and the content granted through a package were each fetched separately and merged, so a page of ten could return thirty rows, page two was not the second page of the union, and the page count came out wrong. It hit exactly the roles that reach more than one source — organization admins, coordinators and tutors. A subscription dated in the future also hid only the course while leaving its units, lessons and items visible; the rule now applies to all of them.
The back office gained an "Agents" panel, with twin question generation as its first agent. You upload a question bank PDF (optionally with a page range) and pick the curriculum node the questions will hang from along with the generation and review models; the AI extracts the questions, writes copyright-safe twins of them, has a separate model review what it produced and repairs once whatever falls below the quality bar. The run executes on the server, so closing the tab does not affect it, and the panel follows it stage by stage. Generated questions are reviewed as preview cards — text, choices, difficulty and curriculum topic are all editable per question — and reach the question bank only once you approve them. A printable PDF can be produced as well.
Twin generation runs became reliable. Three runs can execute at once — a second run used to wait for the first to finish, which read as the panel being stuck — a run that goes silent is failed automatically so the panel offers Retry, and the same job handled twice can no longer overwrite a run that had already finished. Generation now uses the subject’s own glossary, so the terms a question tests are preserved verbatim while the choices and their order genuinely change. A single character the typesetter could not set no longer costs a whole run its PDF either.
Group lesson packages are grouped by subject. Package management takes a category per package (Sciences, Math & Computer Science, Social Sciences & History, Language & Literature, Arts, Engineering, Business & Economics, Other), and the pricing page shows a row of tabs for them under the group lessons tab. The row appears only when more than one category is present, and a leading "All" tab is selected by default, so uncategorised packages stay reachable.
A "Credit Ledger" page was added to the management menu. Every movement on student credits and the current balances are listed in two tabs, with search, filtering and paging all resolved on the server, and a balance row hands over to the ledger filtered to that credit. A movement opens in a right-hand sheet headlined by its minute delta, and shows the package that granted the minutes, the feature it came from, what was paid for that package and the payment behind it with its date, status and total. A credit granted by hand says so instead, since it has no payment record.
The tutor earnings list is aggregated on the server. The page used to pull every matching entry in 500-row requests and then group, filter, paginate and total them in the browser, with the name search and the subject filter applying only to what it had fetched. The list now renders one page from a single request, and the totals and the export are computed over the whole filtered range. Cancelled entries stay out of every earnings figure and a row with nothing left to pay is dropped rather than shown at zero — filtering by the cancelled status brings those rows back.
The payments and subscriptions management listings are scoped to the caller’s organization. The organization filter never reached the server, so the queries ran unscoped: an organization admin’s page usually failed to open, and when it did open, the counters above the list were counted over every organization. Platform administrators keep their cross-organization access.
Deleting an account now cancels its subscriptions. The subscription stayed active after the account was deleted, so the nightly renewal kept charging a card nobody can pay, then failed while addressing the cancellation e-mail to a user it could no longer find, and the same rows failed again the next night. The subscriptions the account pays for on someone else’s behalf — a guardian paying for a student, say — are cancelled with it, and the payment history is kept intact.
A "Metrics" page was added to the management menu. Six cards cover new users, active users, completed assessments, answered questions, payments with their revenue, and completed live sessions; each shows the value for the selected range, the change against the previous period of the same length, and a sparkline. Selecting a card drives the chart below it, which overlays the previous period as a dashed ghost line. Buckets follow the range — daily, weekly or 30-day — and every total is the sum of the buckets it is drawn from.
Elapsed exam time is recorded from the wall clock. It used to be tracked by a counter bumped a fixed amount per tick, and a background tab is throttled to about once a minute, so a student who switched away came back with part of the elapsed time never recorded. The timer on screen and the value stored now read the same clock, the time is written when the page is hidden or closed, and a checkpoint still in flight when the student finishes can no longer put the attempt back to "in progress".
The dialog that waits while open-ended answers are graded was fixed. A single failed request was read as "grading finished", so an attempt could be completed over answers that were never scored; a check that could not be made is now treated as unknown and polling continues. There is also a way out of a dialog that cannot be dismissed: if grading drags on, it offers to go to the results. Polling stops while the tab is hidden and checks immediately on return, and on the interactive PDF side a badge no longer stays stuck on "grading" after an error.
A student added to a class later is added to the class’s upcoming group sessions too. Participants were snapshotted from the class roster when the session was booked, so a student who joined afterwards had no participant row and was rejected at the join link. The missing rows are now filled in for the unfinished sessions of the class’s active tutor matches, and the join link is e-mailed and notified to the newly added student only. Joining by invitation code goes through the same path.
The comboboxes on the intro session form no longer show untranslated empty states, and their options load faster.
Date-specific availability is saved in one go. Editing a day dropped its existing slots first, which put the day back on its weekly hours for an instant, so an edit whose final state covered every booked session perfectly well could still be rejected: a tutor with an 11:00-14:30 override hosting an 11:00-12:30 session could not add 18:00-23:00 to that same day. Saving is now a single request in a single transaction, the coverage check runs against the resulting hours, and a rejected edit leaves the stored hours untouched. A failed save keeps the dialog open so the entered hours can be corrected.
The app pages got markedly faster. The sidebar read the current roles through a query of its own, which made a page rebuild itself two or three times per load and re-run every component and every query with it; roles are now read from what the session already carries. Translation files are shared with the request already in flight, and the translation watchers that piled up across client-side navigation are gone. The payments, subscriptions and earnings lists arrive in one query instead of an extra request per row, an exam checkpoint costs two requests a minute per student instead of six, and the grading-status poll reads a single marker rather than the whole queue. Requests per full page load went, for example, from 29 to 6 on the questions page, 18 to 6 on contents and 24 to 9 on users.
Fixed a fault that made screens asking for a user profile fail. The profile field could not be resolved on the server at all: it came back empty with an error recorded alongside it, and since the client rejects any response carrying an error, that surfaced as the page not opening rather than as a missing field.
Question import from PDFs and images, an AI chat for video solutions and a bilingual blog shipped, along with fixes across live session times, invoicing and permissions.
Questions can now be imported from PDFs and images. The "Import from PDF/Image" step on the questions list and in the assessment question picker takes a single PDF (with an optional page range) or a set of page images you can reorder. Questions appear as preview cards as they are parsed; you mark the correct choice and save them one by one or in bulk, skipping the ones you do not need. Difficulty, pool and curriculum can be assigned to the whole selection at once. The answer key can be pasted as text, uploaded as a file, or read from pages you mark inside the PDF. An unfinished import resumes where it left off, even if the browser was closed in between.
Tutors and administrators can review assessments and contents without starting them as a student. An eye icon on the list cards opens a preview in a new tab: questions are browsed one at a time, SAT/AP mock exams get a tab per module, and correct answers and the grading rubric for free-response questions are visible from the start. Contents open PDFs and videos without the student-side question pop-ups, the AI chat and time tracking, and drafts can be reviewed before they are published. The preview stores nothing, so attempt analytics are untouched.
Scrubbing a video no longer wedges the player. Seeking could leave the picture racing ahead of the sound, with play and pause unresponsive until the page was reloaded.
Tutors are now reminded to file their post-session reports. A persistent banner on the dashboard lists the sessions still owing one, and the same list opens in a dialog whenever the tutor returns to the app — at most once every 15 minutes — with each row linking to that session. Sessions missing a report are also marked on the live sessions page, both in the list and in the day, week and month calendar views.
Session times in the Zoom portal are shown in Türkiye time. We never sent a timezone, so the portal fell back to the host account’s own zone and could display a lesson an hour off whenever that zone observed DST; the stored time was always correct, only Zoom’s label was wrong. The live session panel is now pinned to the organization’s zone as well, and viewers in a different zone see a "TSİ" hint next to the time.
Sessions that have started stay in the "Upcoming" list. A lesson used to disappear the moment it went live — exactly when the join link was needed. An ongoing lesson now carries its own badge.
The class detail in "My Classes" now lists only that class’s sessions; every class previously showed the same list, including the student’s one-to-one lessons and the sessions of their other classes. The join button was fixed too: for Zoom sessions it landed on the login page, and it was clickable even for lessons days away.
The status dropdown and visibility switches were removed from the classroom report form for tutor roles. Reports written by these roles are published directly and visible to administrators only.
Individual and corporate billing details are now stored separately. There used to be a single record per user, so saving corporate details overwrote the individual address and phone, and an invoice could be bound to a contact opened for the previous legal person. Both profiles are kept side by side, the one used at checkout applies to the next invoice, and changing the tax number makes the provider contact resolve again.
Failed invoices are now visible on the payment detail, and administrators can retry one by hand. Invoice attempts run against a 24-hour budget instead of a fixed attempt count, back off between tries, recover automatically when a job stalls, and raise a notification when an invoice fails. A slow provider could previously burn through the attempts of a perfectly valid invoice.
The invoice e-mail was rebranded, and organizations can now clear their VAT exemption code and note — once filled in, those fields could not be emptied again.
User search in the add and edit subscription dialog moved to the server. It previously searched only within the newest 1000 users, so anyone outside that window could not be found at all, and the dialog was slow to open.
The choice between e-Invoice and e-Archive is never guessed any more. When the lookup that says whether the buyer is a registered e-invoice taxpayer cannot answer, the document waits instead of being issued, and a billing profile with no tax number no longer starts the process at all.
Lesson credits on manually managed subscriptions are granted per feature. Credits were only issued when a subscription was first created, so a subscription that became active through an edit — or a package whose features were corrected afterwards — could never receive the missing balance. Saving the subscription now fills in whatever is missing.
Rows in the payments list fall back to the payer’s e-mail address instead of showing nothing when the profile has no name.
Video solutions now come with an AI chat. The solution dialog is split in two: the video on the left, a chat of its own for that solution on the right. The assistant sees the question, its choices and the correct answer next to the content of the video. Video solutions uploaded earlier were processed as well, so they are chat-ready too.
Passage-based questions are sent to the chat as a whole. Only the sub-question you clicked used to be forwarded, leaving the passage and the sibling sub-questions out. A question with no topics attached, which used to break the chat entirely, was fixed as well.
Instructors see and edit only the assignments they created. Every assignment in the organization was previously listed, another instructor’s assignment could be opened by URL, and a student’s assignment list showed what other instructors had given them.
An expired assignment becomes active again when its deadline is moved into the future, and the students’ assignment statuses are updated along with it.
Contents, topic quizzes and mock exams were added to the sidebar for the saksiTutor role. Create, edit and delete stay hidden on those lists — the records are reviewed through the preview.
Fixed an issue where requests handled at the same time could pick up each other’s session. In rare cases a response could be finalized with another user’s session — most likely during a live session, when both sides keep the same page open at once.
The Zoom host link is visible to oversight staff only; it was previously exposed to students and tutors as well.
Taking a package off sale no longer removes the curriculum and courses it granted to an organization. An inactive package means "no longer sold", not "grant revoked" — organization admins and staff used to see less than platform administrators in that state.
A single deeper curriculum grant no longer strips the sub-topics off every other curriculum in the organization’s tree, which used to leave the trees showing top-level headings only.
The expertise picker in tutor onboarding also lists curricula granted to the organization from a deeper level. Those used to be dropped from the list together with their whole subtree.
A tutor’s edit card on the users page failed to open when the same curriculum topic had been saved for them more than once. The duplicate records were cleaned up and new ones are prevented. Retrying an interrupted tutor onboarding no longer files a second application either.
The blog became bilingual. Every post and category takes its own English title, subtitle, meta title, meta description and content, with a separate English publish switch. URLs are per language, an address carrying the other language’s slug is permanently redirected to the canonical one, and the pages emit their own canonical and hreflang tags. A post with no live English version opens with the Turkish content. Posts now show a last-updated date, and the nav and footer link reads "Eğitim Rehberi / Education Guide".
Unpublished blog drafts were readable through the public query; drafts are now restricted to authorized users.
Blog title search in the admin panel is no longer case-sensitive.
Invoicing became configurable per organization, and a batch of live session, availability calendar and Saksı AI chat issues were resolved.
Each organization can now configure its own e-Archive/e-Invoice provider (Paraşüt). Provider details are managed from a new "Invoice Provider" page in the sidebar, with secrets stored encrypted and masked in the interface. The page is restricted to platform administrators — organization admins do not see the provider credentials.
A billing information tab was added to the profile page, so users can keep their invoice details up to date without waiting for checkout.
The billing information step is now live in the checkout flow, alongside the completed invoicing pipeline. Checkout shows the card section first and billing below it; buyers with a stored billing profile see it collapsed the way a saved card is, and only open the form when they want to enter different details.
Retrying invoice creation no longer produces duplicate documents. If the request reaches the provider but the response never gets back to us, the retry now finds the existing invoice and e-document and continues with it instead of issuing a second one.
Intro sessions keep their fixed 30-minute length when rescheduled. The reschedule screen previously also offered 60 and 90 minutes, which could turn an intro session into a full-length one.
When no Zoom account is available the session is no longer created at all. Previously the session was saved first and the Zoom account assigned afterwards, leaving a session with no meeting link behind on failure.
Failed intro session requests no longer show a misleading success message.
Tutor search moved to the server. It previously searched only within the first 1000 users; now every tutor is searchable.
Every calendar and list view on the availability screens now starts the week on Monday. They previously started on Sunday, which did not match the live session calendars.
Math expressions and markdown formatting in chat were rebuilt. Formulas no longer break up paragraphs, inline expressions no longer interrupt the flow of a sentence, and raw LaTeX no longer flashes while a response streams in.
The underlying AI model was upgraded to Gemini 3.5 Flash.
Read and unread tabs were added to the notification list for administrators.
The link in the assessment completed notification now points to the student’s own organization. It previously led to a 404 page in some cases.
Fixed an issue where the unread counter on the tabs could get stuck showing the wrong number.
The guardian profile step was simplified. The disabled-looking "Skip" button is gone in favour of a single "Save & continue" button, and missing fields are reported with an inline error instead of locking the button. Continuing without selecting a student now completes onboarding directly.
An "Editor" role was added for managing blog content. Editors can create and edit blog pages and categories, have no access to the rest of the platform, skip the onboarding wizard, and land directly on blog management when they sign in. They also get their own tab on the users page.
The curriculum options offered during onboarding are now limited to what the organization’s active packages grant, and the selection is validated on the server as well.
Tutors now see only the topics they are qualified for, plus their parent headings, in the curriculum trees. The same restriction was applied to the interactive content list.
English pages are served from English URLs — the language courses page now lives at /en/language-courses, for example. Old addresses redirect to the new ones.
Get detailed information about our programs.
Get in Touch