Roles

Admins manage everything, including settings, access, integrations, modules, data, and updates. Operators run the modules they are assigned to: for Attendance, that means meetings, attendance corrections, reports, and kiosk status. Operators can view the roster but not change it. Being on the roster does not give anyone dashboard access.

To give someone access, open Settings › Access, create an Admin or Operator account, and optionally link it to their roster entry. Choose the modules an Operator can use under Module access when you edit their account.

The primary navigation shows Meetings, a page for each module that is turned on and adds one, Roster, Reports, Kiosks, and Settings. Admins see these settings pages:

Settings pageWhat it controls
OrganizationName, subtitle, logo, and colors.
ModulesManage modules turns modules on or off and adds, updates, or removes modules. Attendance has the tabs Attendance rules, Labels, Meeting configuration, Fingerprint sharing, Fingerprint recovery, and Attendance setup. Each other module with settings has its own page.
AccessAdmin and Operator accounts, their roster links, and the modules each Operator can use.
IntegrationsGoogle sign-in, Google Calendar, Resend email, FIRST team lookup for FRC, FTC and FLL, and Discord.
DataBackups, restores, and deletion.
UpdatesThe update track and dashboard updates. See Update LancerLogin.

Each person switches between light and dark with Light mode in the Settings bar. The choice is saved in that browser, and a new browser starts in dark.

Most pages offer a short walkthrough on your first visit. Choose Not now to see it later.

Schedule and run a meeting

  1. On Meetings, choose Add meeting. Enter the title, date, start and end times, optional notes, attendance weight, and whether attendance is required. For a repeating schedule, choose daily, weekly, every two weeks, or monthly and an end date. Meeting attendance windows cannot overlap.
  2. Switch between the calendar and table views to find a meeting, and select it to open its workspace. There you can choose Edit, Duplicate, or Delete meeting. For a repeating meeting, choose this occurrence or this and future occurrences.
  3. Members scan on arrival and on departure. One scan shows as Active · not checked out; an arrival and a departure make the member Present. After the meeting ends and the late scan allowance passes, an incomplete pair becomes absent unless someone corrects or excuses it.
  4. To correct attendance, choose Present, Excuse, or Absent for the attendee. Excusing or marking absent requires a reason. Admins can also choose Clear to remove the attendee's records for that meeting. Every change keeps its audit history.

Timing rules that apply to every meeting are in Settings › Modules › Attendance › Meeting configuration.

Manage the roster

On Roster, Admins can add one member at a time or import many. To import, upload a CSV or paste spreadsheet rows. A CSV needs the columns Member ID, First name and Last name; Email and Discord user ID are optional. Choose Download template for a starter file. Header names are matched loosely, so First Name, first_name and firstName all work, and other columns are ignored with a warning. Spreadsheet rows pasted without a header must use the template column order.

  1. Choose the import behavior: Add to or update the current roster keeps people who are not in the file, and Replace the active roster makes everyone not in the file inactive.
  2. Choose Preview roster and check every change. Nothing is saved until you confirm.

Making a member inactive keeps their attendance history and any dashboard account. Meetings held while a member is inactive do not count against them.

Admins add, rename, and retire member labels, such as a class or team, in Settings › Modules › Attendance › Labels, and link a label to a Discord role there. They give a label an attendance requirement in Settings › Modules › Attendance › Attendance rules. A meeting can be for all members or only for selected labels.

Report on attendance

Reports opens on the Leaderboard, with period, roster, label, and sorting controls, plus attendance alerts and contests waiting for review. Saved reports appear as tabs. Choose + to build a report: pick the period, members, meetings, and columns, then save it for yourself or share it with other staff.

For a monthly class report, choose Current month, the class label, Current membership, and the class's report-period policy result column. Choose Download report CSV to export the selected columns for every matching member. CSV exports store values that look like spreadsheet formulas as text.

Connect optional integrations

Open Settings › Integrations as an Admin. Each integration shows the console link, the exact value to copy into the provider, and a verification step. An integration shows as configured only after verification succeeds, and saved secrets are never shown again.

G

Google Calendar

Connect a calendar you can write to. In a meeting workspace, choose Sync configured calendars to send the meeting's title, notes, and times.

R

Resend email

Send missed-meeting emails and individual attendance reports to the email on each member's roster entry.

D

Discord

Member commands, absence notices with a contest button, meeting events, and a kiosk status message.

LancerLogin Settings Integrations page, with the settings tabs Organization, Modules, Access, Integrations, Data and Updates, listing Google OAuth, Google Calendar, Resend email and Discord bot, each marked Disabled with its switch off.
Each integration starts disabled. Turn one on to see its setup steps.

Connect Google Calendar

Google Calendar uses its own OAuth client, separate from Google sign-in. Enter each value in Settings › Integrations › Google Calendar.

  1. In the Google Cloud console, use a separate project for Calendar. If you use the sign-in project instead, add the two Calendar scopes under Data Access: https://www.googleapis.com/auth/calendar.calendarlist.readonly and https://www.googleapis.com/auth/calendar.events.
  2. Enable the Google Calendar API in that project.
  3. In Google Auth Platform › Clients, create a Web application client. Add the Authorized redirect URI that the Google Calendar card shows. It has the form https://<slug>-dashboard.pages.dev/api/admin/integrations/google-calendar/callback.
  4. For an External audience in Testing, add the Google account that will authorize Calendar under Audience › Test users.
  5. In LancerLogin, enter the client ID and client secret and choose Save credentials.
  6. Choose Authorize Google Calendar. Sign in with the account that owns or can edit the calendar, and approve both permissions.
  7. Choose Load writable calendars, pick the destination calendar, and choose Use this calendar.

If authorization fails, the card shows a message that explains the problem. In Testing, Google ends the authorization after 7 days. For ongoing sync, publish the app (In production) or use an Internal audience. When the card warns that authorization needs renewing, choose Re-authorize Google Calendar.

Set up Resend email

Enter each value in Settings › Integrations › Resend email.

  1. Create an account or sign in at resend.com.
  2. Under Domains, add a domain you control. Add the DNS records Resend lists, then wait until the domain shows Verified.
  3. Under API Keys, create a Sending access key restricted to that domain.
  4. In LancerLogin, paste the key and a plain From address on that domain, such as attendance@example.org. Do not add a display name.
  5. Choose Save credentials.
  6. Choose Send verification code, then enter the six-digit code within ten minutes.

The onboarding@resend.dev test sender delivers only to the email address of your own Resend account. If verification fails, the card shows Resend's own reason.

Create the Discord bot

Follow these steps in order. Discord checks the Interactions Endpoint URL when you save it, and LancerLogin can answer only after its credentials are saved. Enter each value in Settings › Integrations › Discord bot.

  1. Open the Discord Developer Portal, choose New Application, and name it.
  2. On the Bot page, choose Reset Token and copy the bot token into LancerLogin. Treat the token like a password. For optional label role sync, turn on the privileged Server Members Intent on the same page.
  3. On the General Information page, copy the Application ID and Public Key into LancerLogin.
  4. On the Installation page, enable Guild Install and select the bot scope. Grant View Channels, Send Messages, Read Message History, Pin Messages, Create Public Threads, Manage Threads, Create Events, Manage Events, and Manage Roles. The bot needs Create Events to create scheduled events. Use the install link to add the bot to your server. For role sync, place the bot's role above the roles it will manage. Members need Send Messages in Threads in the attendance channel to ask questions in absence-notice threads.
  5. In Discord, turn on Developer Mode in User Settings › Advanced. Right-click the server and choose Copy Server ID. Right-click the attendance channel and choose Copy Channel ID. The attendance channel must be a text channel. Paste both into LancerLogin.
  6. In LancerLogin, choose Save credentials. All five values are required to save.
  7. Copy the Interactions Endpoint URL that LancerLogin now shows under Verify the connection. This is the exact address the API uses. It has the form https://<slug>-dashboard.pages.dev/api/discord/interactions. Paste it into Interactions Endpoint URL on Discord's General Information page and choose Save Changes.
  8. Choose Send Discord verification, then press the button in the message the bot posts.

If Discord says the interactions endpoint URL could not be verified, confirm that you chose Save credentials first. Then check that the saved public key is from the same Discord application: copy it again from General Information and use Replace saved credentials.

If you use private anomaly reports, add the bot to that private channel with View Channel, Send Messages, and Read Message History.

Enable the Discord member commands

In Settings › Integrations, save the bot token, Application ID, public key, Server ID, and attendance channel ID, then choose Send Discord verification. LancerLogin checks that the bot token belongs to that application and server and creates or updates exactly the guild-scoped /pair, /attendance-report, /label, /outreach-submit, and /outreach-correction commands. No manual HTTP request or command payload is required.

The Interactions Endpoint URL goes into Discord only after you save credentials, as described in Create the Discord bot. Commands work only in your server and return ephemeral responses, visible only to the member who ran them. /attendance-report reports only on the member's own linked roster entry. The Outreach commands need the Outreach plugin turned on and set up. Exact submission retries reuse the same receipt, and corrections wait for staff review before totals change. If commands go missing, choose Reconcile Discord commands.

Turn modules on or off

Open Settings › Modules › Manage modules. Turning a module on opens its setup. Turning a module off hides its pages at once and keeps its data for seven days before deleting it; turn it back on within that time to keep everything. Adding a new module with Add module commits a change that Apply changes deploys as an update; see Add, update, or remove plugins.

Some modules ask to use another module, for example Guest Visits recording visits as Outreach team support. Review and grant that in Settings › Modules › Module access.

Back up, restore, or delete data

Settings › Data has separate backup, restore, and delete controls for Meetings and attendance, Roster, and Entire installation. A file restores only into its own category, and each restore or deletion asks you to type a confirmation phrase.

Start fingerprints over

If fingerprint links have become unreliable, an Admin can reset them in Settings › Modules › Attendance › Fingerprint recovery. Reset all fingerprint mappings removes every member-to-fingerprint link on every paired kiosk as each one reconnects, deletes cloud copies, and turns fingerprint sharing off. Members then enroll again. Roster, attendance, pairing, and badge or QR links are not changed. Reader templates stay on the readers until you use Erase unlinked fingerprints on each kiosk.

Recover access when every Admin is locked out

Use this when no Admin can sign in with a password. A Google-only Admin recovers access through their Google account instead. Password recovery deliberately does not go through the dashboard. You need a computer with Node.js, a checkout of your private deployment repository, and a Cloudflare API token for the same account.

  1. Clone your private deployment repository, open a terminal in it, and run npm ci.
  2. In Cloudflare, create an account API token with Account Settings: Read and D1: Edit, using the same steps as the installation token. You can reuse the installation token instead.
  3. In that terminal only, set CLOUDFLARE_API_TOKEN to the token and CLOUDFLARE_ACCOUNT_ID to your account ID. Do not save either value in a file.
  4. Run npm run reset-password -- --database <slug>-data --username <admin-username>.
  5. Type the new password twice at the hidden prompts. It must be at least 12 characters.
  6. The tool reports passwords_reset: 1 when it worked. A 0 means the username was not found; check it and run the command again.
  7. Close the terminal, or clear both variables, and sign in with the new password. The reset also clears any temporary sign-in lock.

After five wrong passwords, sign-in to that account pauses for 15 minutes. Waiting is enough; you do not need this procedure for a temporary lock. Any Admin who can still sign in can set a new password for another account in Settings › Access.