# OptiSet — Product Specification

**Product**: OptiSet — a multi-tenant SaaS workspace for IT teams to track hardware assets, assign them to employees, monitor warranties, and report on inventory.
**Vendor**: Blackshift Technologies.
**Positioning**: "Replace spreadsheets. Track every asset." A self-serve, workspace-per-company (subdomain-style) IT asset management tool.

---

## 1. Information Architecture

### 1.1 Public / Marketing Site (unauthenticated)

| Page | Path | Purpose |
|---|---|---|
| Home / Landing | `/` | Marketing homepage — hero, features, workflow, security, customers, pricing, FAQ, footer |
| About | `/about` | Company/product story, value pillars (Teams, Global Scale, Enterprise Ready), link to parent company |
| Careers | `/careers` | Open-application job form |
| Contact | `/contact` | Sales & support contact form |
| Blog | `/blog` | Placeholder ("Articles coming soon") |
| Docs | `/docs` | Product documentation hub with sidebar navigation |
| Integrations | `/integrations` | Placeholder — announces future Okta / Google Workspace / Azure AD / MDM integrations |
| Privacy Policy | `/privacy-policy` | Legal |
| Terms of Service | `/terms-of-service` | Legal |
| Refund Policy | `/refund-policy` | Legal |
| Cookie Policy | `/cookie-policy` | Legal |
| Data Processing Agreement | `/dpa` | Legal |

### 1.2 Authentication Screens (unauthenticated)

| Screen | Path | Purpose |
|---|---|---|
| Sign In | `/login` | Workspace login |
| Create Workspace | `/register` | Self-serve tenant sign-up |
| Forgot Password | `/forgot-password` | Request reset link |
| Reset Password | `/reset-password` | Set new password via emailed token |

### 1.3 Application Workspace (authenticated, behind login)

Persistent left sidebar navigation, in order:

1. Dashboard
2. Assets
3. Import Assets
4. Employees ("Directory")
5. Assignments
6. Warranty Alerts
7. Reports
8. Audit Log
9. Billing & Plans

Plus: floating **AI Assistant** widget available on every authenticated screen; **Logout** action in sidebar footer.

---

## 2. Navigation & Global UX Elements

### 2.1 Sidebar (persistent, all workspace screens)
- **Logo/brand**: "OptiSet" wordmark + workspace name displayed beneath it.
- **Nav links** (icon + label), current page highlighted.
- **User card**: avatar initial, full name, role.
- **Logout button**.

### 2.2 Top-of-page pattern (repeats across list screens)
- Page title + one-line description/subtitle (often a live count, e.g. "42 assets").
- Primary action button(s) top-right (e.g. "Add Asset", "New Assignment").
- Search bar and/or filter dropdown directly below the header.

### 2.3 AI Assistant (floating widget, global)
- Floating round chat-bubble button, bottom-right, on every authenticated page.
- Expands into a chat panel titled "OptiSet AI."
- Natural-language Q&A over the tenant's own asset data (e.g. "Show all MacBooks in Pune," "How many laptops do we have?").
- Starter suggestion chips: *Which assets are assigned?* / *Show unassigned assets* / *How many laptops do we have?* / *Which assets warranty expires in 30 days?*
- Renders answers as a short explanation plus a results table when the query returns rows; shows "No matching records found" when empty.
- Text input + send button; loading indicator (animated dots) while waiting for a response.
- Chat history persists only within the current page session (resets on reload).

### 2.4 Global toast notifications
Success/error toasts appear for: login, registration, password reset request/completion, asset import, payment initiation, contact/careers form submission.

---

## 3. Screens, Actions & Workflows

### 3.1 Dashboard (`/dashboard`)
**Purpose**: At-a-glance snapshot of the entire asset inventory.

**Widgets:**
- 5 stat tiles: Total Assets, Assigned, Available, Under Repair, Retired.
- **Warranty warning banner** — appears only when assets have warranty expiring within 30 days; click-through to Warranty Alerts.
- **Assets by Category** — bar chart.
- **By Team** — pie/donut chart with legend.
- **Warranty Summary** — 4 buckets: `< 30 days`, `30–60 days`, `60–90 days`, `Expired`, each shown as a colored count badge.

**User actions:** click warranty banner → Warranty Alerts screen. No other interactive controls on this screen (read-only overview).

---

### 3.2 Assets (`/assets`)
**Purpose**: Central inventory list — the core object of the product.

**Header actions:**
- **Import** (button, links to Import Assets screen)
- **Export** (button — downloads full inventory as `.xlsx`)
- **Assign Asset** (button — opens Assign modal, unassigned/preselected)
- **Add Asset** (primary button — opens Add Asset modal)

**Search & filter:**
- Free-text search box — matches asset tag, name, serial number, brand (live query as you type).
- Clear-search (×) button inside the search field.
- Status filter dropdown — All Statuses / Available / Assigned / Repair / Retired / Lost.

**Table columns:** Tag (linked), Asset name, Type/Category, Brand/Model, Status (colored pill), Location, Action.

**Row-level actions:**
- **Assign** quick-action pill — shown only on assets with status "Available"; opens Assign modal preselected to that asset.
- Chevron → opens the Asset Detail screen.
- Empty state: "No assets found."

**Forms triggered from this screen:**

**Add Asset modal** — fields: Asset Tag*, Asset Name*, Category* (dropdown: Laptop/Desktop/Monitor/Phone/Tablet/Printer/Networking/Server/Accessories/Other), Status (dropdown: Available/Assigned/Repair/Retired), Brand, Model, Serial Number, Vendor, Purchase Date, Purchase Cost (₹), Warranty Expiry, Location, Team. Cancel / Add Asset buttons. Inline error banner on failure.

**Assign Asset modal** — fields: Asset* (searchable dropdown, restricted to "Available" assets; locked/preselected when launched from a specific asset), Employee* (searchable dropdown), Assigned Date* (defaults to today), Expected Return date, Notes (free text). Cancel / Assign Asset buttons. Validation: both Asset and Employee required. Warns "No available assets. Add assets first." when inventory is exhausted.

---

### 3.3 Asset Detail (`/assets/[id]`)
**Purpose**: Single-asset record with full history and identity tag.

**Header:** breadcrumb (Assets / tag), asset name, status pill, brand/model/serial line.

**Header actions:**
- **Assign** (primary button — only when status is "Available")
- **Edit** (opens Edit Asset modal, pre-filled)
- **Delete** (destructive; confirms via browser dialog "Are you sure you want to delete this asset? This action cannot be undone."; redirects to Assets list on success)

**Panels:**
- **Details** card — Asset Tag, Category, Purchase Date, Purchase Cost, Warranty Expiry, Location.
- **History Timeline** — chronological log of actions on this asset (purchase, assignment, return, repair, update, retirement) with notes and timestamps.
- **Asset QR Tag** card — auto-generated QR code image, scan target URL shown below it, "Download QR" button (downloads PNG). Designed so scanning the tag opens this same asset page on any device.

**Edit Asset modal** — same field set as Add Asset (minus Asset Tag, which is immutable). Cancel / Save Changes.

---

### 3.4 Import Assets (`/import`)
**Purpose**: Bulk-onboarding flow for migrating from spreadsheets.

**3-step guided workflow (numbered cards):**
1. **Download Template** — button downloads a blank `.xlsx` with correct columns.
2. **Upload File** — drag-and-drop zone (also click-to-browse); accepts `.csv` / `.xlsx`; shows selected filename with a remove (×) control.
3. **Confirm** — "Run Import" button (appears once a file is selected); shows "Importing…" state while processing.

**Result panel (post-import):**
- Success summary: "Import Complete — N assets added."
- Error list (if any rows failed), scrollable.
- Plan-limit handling: if the workspace's asset quota is hit mid-import, a toast explicitly says so and prompts an upgrade; if the whole import is blocked by the quota, no records are added and the user is told to upgrade.
- "Import Another" button resets the flow.

---

### 3.5 Employees / Directory (`/employees`)
**Purpose**: Company employee roster, used as the target of asset assignments.

**Header action:** **Add Employee** (opens modal).

**Search:** free-text — name, email, department.

**Layout:** card grid (not a table) — one card per employee showing avatar initial, full name, employee ID, department, email, phone (if present).

**Card action:** **View Profile** button — present on every card (currently a placeholder; no destination screen exists yet).

**Add Employee modal** — fields: Employee ID*, Full Name*, Email*, Phone, Department, Team, Manager Name, Manager Email. Cancel / Add Employee.

**Empty state:** "No employees found. Add one to get started."

---

### 3.6 Assignments (`/assignments`)
**Purpose**: Ledger of who currently holds (or has held) which asset.

**Header action:** **New Assignment** (opens the same Assign Asset modal used elsewhere).

**Search:** free-text across employee name, asset tag, asset name.

**Table columns:** Employee (name + employee ID), Asset (tag + name), Assigned On, Returned On (or "Active" status pill), Action.

**Row action:** **Mark Returned** — visible only on active (not-yet-returned) assignments; confirms via browser dialog before posting the return, which frees the asset back to "Available."

**Empty state:** "No assignments found."

---

### 3.7 Warranty Alerts (`/warranty`)
**Purpose**: Proactive warranty-expiry monitoring, grouped by urgency.

**Three sections, each a collapsible-styled card with a count badge:**
1. 🔴 Expiring in < 30 Days
2. 🟠 Expiring in 30–90 Days
3. ❌ Already Expired

Each section is a table: Tag (links to Asset Detail), Asset name, Brand, Expiry Date. Sections with no items show "No assets in this category."

---

### 3.8 Reports (`/reports`)
**Purpose**: Data export center.

**Two report cards:**
1. **Full Inventory Export** — "Download Inventory (.xlsx)" — every asset, assignment, and status in the workspace.
2. **Import Template** — "Download Template (.xlsx)" — blank column-mapped template for bulk imports.

No other reports, filters, or scheduling exist on this screen today — it is a two-button download center.

---

### 3.9 Audit Log (`/audit`)
**Purpose**: Compliance trail of admin actions across the workspace.

**Table columns:** Action (icon + label, e.g. "Created Asset," "Deleted Asset," "Assigned Asset"), Entity (type + ID), Details (free-text description), Timestamp.

Read-only, no filters or search on this screen. Empty state: "No audit logs yet."

---

### 3.10 Billing & Plans (`/billing`)
**Purpose**: Self-serve subscription management.

**Current Plan card:** plan name ("Basic Workspace"), description, **Assets Used** progress bar (e.g. "12 / 50"), billing cycle ("Free Forever").

**Upgrade options (3-card comparison), each with feature checklist and a CTA button:**
- **Optiset Pro** — $29/mo, up to 500 assets, "Upgrade to Optiset Pro" (marked "Recommended"). Feature list: bulk import/export, warranty alerts, advanced reporting, email notifications, priority support.
- **Optiset Pro Max** — $39/mo, up to 1,000 assets, "Upgrade to Pro Max." Adds: double capacity, dedicated account manager, custom data imports, advanced compliance reports.
- **Enterprise** — custom pricing, unlimited assets, "Contact Sales" (routes to the Contact page). Adds: custom subdomain, full API access, SSO (Okta/Azure), dedicated CSM, custom DPA.

**Checkout workflow:** clicking an upgrade CTA triggers a hosted payment-gateway checkout (Cashfree) — a loading toast ("Initiating secure payment…") is shown, then the user is redirected into the payment gateway's own checkout UI.

---

### 3.11 Sign In (`/login`)
**Fields:** Workspace (slug, with a fixed `.optiset.in` suffix shown inline), Email, Password.
**Actions:** "Forgot password?" link; "Sign In →" submit; link to "Create one free" (Register).
On success: redirected into the tenant's Dashboard with a "Welcome back! Entering {workspace} workspace…" toast.

### 3.12 Create Workspace (`/register`)
**Fields:** Company Name* (auto-generates a live-preview workspace slug, e.g. "acme.optiset.in"), Your Full Name*, Work Email*, Password*.
**Action:** "Create Workspace →". Link to Sign In for existing workspaces.
On success: new tenant is created and the user lands directly in the Dashboard.

### 3.13 Forgot Password (`/forgot-password`)
**Fields:** Workspace slug, Email. Submits to request a reset link; screen swaps to a "Check your email" confirmation state. Link back to Login.

### 3.14 Reset Password (`/reset-password`)
Reached via emailed link with a token. **Fields:** New Password, Confirm New Password (min. 8 characters, must match). On success shows a confirmation state and auto-redirects to Login after a short delay. Shows an explicit "Invalid Link" state if the token is missing/expired.

---

## 4. Marketing Site Detail

### 4.1 Homepage (`/`) sections, top to bottom
1. **Sticky nav** — logo, in-page links (Features, Pricing, Docs, Security, Customers), Sign In, "Start Free Workspace" CTA.
2. **Hero** — headline "Replace spreadsheets. Track every asset.", subcopy, two CTAs ("Start Free Workspace," "See Features"), trust line ("No credit card required • Setup in under 60 seconds • Multi-tenant SaaS").
3. **Features grid** (6 cards) — Track Every Asset, Team Assignment, QR Code Tags, Warranty Alerts, Rich Dashboard, Bulk Import.
4. **Workflow section** — 3-step "how it works": Import Your Assets → Assign Devices → Run Audits.
5. **Security section** — dark panel listing: secure multi-tenant architecture, tenant data isolation, encrypted authentication, role-based access control.
6. **Customers section** — 3 segment cards: Startups, SMBs, Enterprise IT.
7. **Pricing section** — the same 4-tier plan comparison as Billing (Basic/Pro/Pro Max/Enterprise), each card linking to Register (or Contact for Enterprise).
8. **FAQ** — 5-question accordion (expand/collapse on click).
9. **Footer** — brand blurb; Company (About, Careers), Product (Features/Pricing/Security anchors), Legal (5 policy links), Contact (Contact page + direct email); social links (LinkedIn, Twitter/X, GitHub); copyright.

### 4.2 Docs (`/docs`)
Sidebar-navigated documentation hub with sections: Quickstart (adding your first asset), Setting up your tenant, Inviting admins (flagged "Coming Soon"), Bulk Import (Excel), Assigning Assets, QR Generation.

### 4.3 Contact (`/contact`)
Form fields: Full name*, Company name*, Work email*, Inquiry type (dropdown: Sales & Enterprise Pricing / Technical Support / API & Custom Integrations / Other), Message*. "Send Message" submit with loading spinner. Also displays a direct support email and stated response-time expectation.

### 4.4 Careers (`/careers`)
Open-application form: First name*, Last name*, Email*, LinkedIn/Portfolio URL*, Resume link (URL)*, "Why OptiSet?" message*. "Submit Application" button with loading spinner.

---

## 5. Cross-Cutting Workflows

### 5.1 Asset lifecycle
`Available → Assigned → (Returned → Available)` with side branches to `Repair`, `Retired`, or `Lost` at any point (set via Edit Asset). Every state-changing action (create, assign, return, edit, delete) is written to that asset's History Timeline and to the workspace-wide Audit Log.

### 5.2 Assignment lifecycle
Assign (from Assets list, Asset Detail, or Assignments screen) → asset becomes unavailable for further assignment → Mark Returned (from Assignments screen) → asset becomes Available again. Assigning/returning triggers email notifications to the employee (and their manager, per the docs) per the product's stated design.

### 5.3 Bulk onboarding
Download Template → fill offline → Upload → Run Import → review per-row error report → (optional) Import Another. This is the primary path for new workspaces moving off spreadsheets.

### 5.4 Warranty monitoring
Dashboard surfaces a 30-day warning banner → deep-links to Warranty Alerts → three severity buckets → each asset row deep-links to its Asset Detail for action (e.g. Edit to log repair/replacement).

### 5.5 Plan enforcement
Asset count is capped by plan (Basic = 50). Both manual "Add Asset" and bulk "Import" enforce the cap; hitting it surfaces an explicit upgrade prompt and links into the Billing screen's upgrade flow.

### 5.6 Account lifecycle
Register (creates a new tenant workspace + first admin user) → Login (workspace slug + email + password) → Forgot Password → emailed reset link → Reset Password → Login.

---

## 6. Roles & Access (as exposed in the product)

- Each account belongs to exactly one **workspace** (tenant), identified by a company slug (`company.optiset.in`).
- The user who registers becomes the workspace's admin; the sidebar user card shows the signed-in user's name and role.
- Docs states multi-admin invites are on the roadmap ("Coming Soon") — not yet a screen in the product.
- Enterprise plan messaging promises SSO (Okta/Azure AD) as a future/paid capability.

---

## 7. Notable Gaps / Non-Functional Elements (as of this snapshot)

- **Employee "View Profile"** button on the Directory screen has no destination page yet.
- **Blog** and **Integrations** pages are placeholder stubs ("coming soon").
- **Team invitations / multi-admin management** described in Docs is not yet a reachable screen.
- **Reports** module currently offers only two static exports (no custom report builder, scheduling, or filters).
- **Audit Log** has no search/filter/pagination controls.
- Contact and Careers forms show success confirmation but are not wired to a real backend endpoint (simulated submission).
