Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
77672fb
feat(user-test): add step-based PostTest question flow
chanchal430 Jan 30, 2026
be897ed
fix: Issue 6 iframe listeners + PR feedback (useManagedListeners, Ses…
harsh04044 Feb 3, 2026
d511bb6
feat: add email verification on signup
rakshityadav1868 Feb 7, 2026
3ee1e87
Update src/features/auth/views/VerifyEmailView.vue
rakshityadav1868 Feb 8, 2026
23d8380
Update functions/src/https/email.js
rakshityadav1868 Feb 8, 2026
9bec39b
Update src/features/auth/views/VerifyEmailView.vue
rakshityadav1868 Feb 8, 2026
496f59f
Always run autoSignIn first to restore auth session, then apply email…
rakshityadav1868 Feb 8, 2026
ee96095
Update src/shared/controllers/EmailController.js
rakshityadav1868 Feb 8, 2026
7ed645c
Update router to handle public page access
rakshityadav1868 Feb 9, 2026
bf38c89
fix: in moderated study on admin refresh it redirect to test but admi…
rakshityadav1868 Feb 12, 2026
d60192f
fixing all failing tests checks
rakshityadav1868 Feb 13, 2026
fe1dc4f
fixing all i18n failing checks
rakshityadav1868 Feb 13, 2026
93527e9
fixing all i18n failing checks
rakshityadav1868 Feb 13, 2026
26ffe84
Merge branch 'develop' into verify-email
rakshityadav1868 Feb 13, 2026
307d557
Update src/app/plugins/locales/hi.json
rakshityadav1868 Feb 13, 2026
35c7af4
Update src/app/plugins/locales/ar.json
rakshityadav1868 Feb 13, 2026
93670f1
Update src/app/plugins/locales/es.json
rakshityadav1868 Feb 13, 2026
ff5cd4c
Update src/app/plugins/locales/ja.json
rakshityadav1868 Feb 13, 2026
9ac5c82
fixing pr checks and lint
rakshityadav1868 Feb 13, 2026
a165017
fixing pr checks and lint
rakshityadav1868 Feb 13, 2026
4ee144a
fixing keys in all langauage
rakshityadav1868 Feb 13, 2026
4a4a231
fix the color scheme and request loop
rakshityadav1868 Feb 13, 2026
df7fb99
fix(StudyController): move removeNotificationsForTest outside loop to…
Feb 14, 2026
95e7c9a
docs: Add CONTRIBUTING.md guide - Issue #1587
Anushreebasics Feb 16, 2026
1b2805e
fix: read manager dashboard metrics from Answer store instead of non-…
thechillbasu Feb 19, 2026
a41df44
Merge branch 'develop' into verify-email
rakshityadav1868 Feb 19, 2026
91f03d3
refactor: centralize answer data access via allAnswersList getter and…
thechillbasu Feb 20, 2026
c3b6b6c
fix(i18n): replace hardcoded 'es' locale with useI18n and fix v-data-…
thechillbasu Feb 20, 2026
85acca4
fix(i18n): normalize pt_br locale to pt-BR format
thechillbasu Feb 20, 2026
17295b3
Merge remote-tracking branch 'upstream/develop' into fix/storage-sort…
thechillbasu Feb 20, 2026
1b052f6
refactor(store): use optional chaining for doc.taskAnswers
thechillbasu Feb 20, 2026
4d6f0d7
fix: internationalize moderated video panel labels
Siddharth-732 Feb 22, 2026
389929b
fix: localize moderated tools panel across all supported locales
Siddharth-732 Feb 22, 2026
29eddee
submenu text space fixed
Recxsmacx Feb 22, 2026
fa9e8ba
fix: dialog header spacing in heuristic edit dialogs
Ruthwik000 Feb 23, 2026
0d63d3f
fix(auth): remove early return that prevented new Google user registr…
mohi-devhub Feb 23, 2026
611aee0
fix(i18n): localize remaining raw text in VideoCall.vue and add local…
Siddharth-732 Feb 24, 2026
9145507
Randomized questions for the evaluation
7MCristy Feb 24, 2026
ce2db0a
update random_heuristics branch from develop
7MCristy Feb 26, 2026
36ef17c
feat(heuristics): add time analytics by heuristic and total time
jvJUCA Feb 26, 2026
6d3b488
Merge branch 'develop' of https://github.com/ruxailab/RUXAILAB into d…
jvJUCA Feb 26, 2026
c60d68a
Change Firebase project name in Dockerfile
jvJUCA Feb 26, 2026
b106fbe
Update Firebase project configuration for develop
jvJUCA Feb 26, 2026
aaddba2
fix: keep heuristic shuffle stable on resume
jvJUCA Feb 26, 2026
c7629f9
Merge pull request #1758 from 7MCristy/feature/RandomizingHeuristics
jvJUCA Feb 26, 2026
e0a7775
chore(deps): bump the vue-ecosystem group across 1 directory with 2 u…
dependabot[bot] Feb 26, 2026
d51de81
Merge pull request #1762 from ruxailab/dependabot/npm_and_yarn/develo…
jvJUCA Feb 27, 2026
1dd2d81
chore(deps): bump the dev-dependencies-safe group across 1 directory …
dependabot[bot] Feb 27, 2026
340db4e
fix(heuristics): fixed persistence of heuristic weights
KarinePistili Feb 27, 2026
24f5b55
Merge branch 'develop' of https://github.com/ruxailab/RUXAILAB into d…
KarinePistili Feb 27, 2026
9a2f680
Merge pull request #1768 from ruxailab/dependabot/npm_and_yarn/develo…
jvJUCA Feb 27, 2026
a50cfee
Merge pull request #1748 from mohi-devhub/fix/google-signin-new-user-…
jvJUCA Feb 27, 2026
70847c2
fix: corrected logo on inviations email
KarinePistili Feb 27, 2026
784c774
fix(functions): fixed use of env var for region
KarinePistili Feb 27, 2026
7a7281c
fix - ui : add responsive logo to login page for mobile #1771
Cizelle Mar 1, 2026
d8ebb55
chore(deps): bump axios from 1.13.5 to 1.13.6
dependabot[bot] Mar 2, 2026
f4fca88
chore(functions): move CORS to env
jvJUCA Mar 2, 2026
aad6823
chore: remove debug console logs from attachMediaToTasks
Cloxy7 Mar 2, 2026
4a12abc
fix(store): add error handling to Answer.js actions that silently swa…
Harshit2405-2004 Mar 3, 2026
b2268e9
fix(auth): normalize email casing in signup/signin to avoid invalid c…
jvJUCA Mar 4, 2026
ea3b6d9
fix(study-creation): normalize legacy template testType (HEURISTICS -…
jvJUCA Mar 4, 2026
668089b
fix(dashboard): refine stats cards size with toFixed(2)
jvJUCA Mar 4, 2026
879f4e6
refactor(functions): replace raw console.log with project logger utility
Harshit2405-2004 Mar 4, 2026
6dadc5d
Merge pull request #1773 from Cizelle/fix/mobile-login-logo
marcgc21 Mar 5, 2026
b5fbc7e
chore(heuristics): Refactored the heuristics tests in to components
7MCristy Mar 5, 2026
04d20c2
Merge pull request #1801 from 7MCristy/decople-heuristictests
marcgc21 Mar 5, 2026
7c28539
style: updated style on pre-post forms
marcgc21 Mar 6, 2026
d7fe894
Merge pull request #1530 from chanchal430/feat/user-test-stepper
marcgc21 Mar 6, 2026
1011644
fix(date): english fallback when null
jvJUCA Mar 6, 2026
ab10f0e
Merge pull request #1714 from thechillbasu/fix/storage-sorting-locale
jvJUCA Mar 6, 2026
240a5f7
fix: resolved merge conflicts + removed fa icons + remove alter email…
KarinePistili Mar 6, 2026
96e4682
Merge pull request #1644 from rakshityadav1868/verify-email
KarinePistili Mar 6, 2026
4ffae4d
fix(manager-dashboard): exclude hidden answers and align participant …
jvJUCA Mar 6, 2026
150fc33
Merge pull request #1691 from Anushreebasics/contributingdoc
KarinePistili Mar 6, 2026
5644f80
Merge pull request #1705 from thechillbasu/fix/manager-dashboard-metrics
jvJUCA Mar 6, 2026
0d91284
docs: updated readme with contact information
KarinePistili Mar 6, 2026
d57a485
fix: fixed typo on readme
KarinePistili Mar 6, 2026
9587838
Merge pull request #1590 from harsh04044/fix/issue-6-answers-iframe-l…
jvJUCA Mar 6, 2026
0233d5f
Merge pull request #1688 from abhaygoudannavar/fix/delete-study-perfo…
KarinePistili Mar 6, 2026
dca512f
Merge pull request #1792 from Harshit2405-2004/fix/answer-store-silen…
jvJUCA Mar 6, 2026
d9112b6
Merge pull request #1810 from Harshit2405-2004/refactor/standardize-c…
KarinePistili Mar 6, 2026
0c44b78
Merge pull request #1726 from Recxsmacx/nav
KarinePistili Mar 6, 2026
cb2cdcd
Merge pull request #1676 from rakshityadav1868/fix-redirect-on-refresh
KarinePistili Mar 6, 2026
489b29e
Merge pull request #1783 from Cloxy7/chore/remove-debug-logs-usertest…
marcgc21 Mar 6, 2026
469a6c8
Merge pull request #1721 from Siddharth-732/fix/moderator-panel-i18n
KarinePistili Mar 6, 2026
0ea49a1
fix(study): allow answering unmoderated study without pre and post te…
KarinePistili Mar 6, 2026
721287d
feat(locales): add missing answer error keys to all languages
Harshit2405-2004 Mar 7, 2026
5535188
Merge pull request #1746 from Ruthwik000/fix/heuristic-edit-dialog-ui
marcgc21 Mar 7, 2026
8a10044
Merge pull request #1777 from ruxailab/dependabot/npm_and_yarn/develo…
marcgc21 Mar 7, 2026
a1252b8
Merge pull request #1815 from Harshit2405-2004/fix/locale-answer-erro…
marcgc21 Mar 7, 2026
8c373da
docs: added contribution link to discord
marcgc21 Mar 9, 2026
2599986
ci: solved problems with pre-commit hook
marcgc21 Mar 9, 2026
5cf453e
fix(email): configured send email as https call to support different …
KarinePistili Mar 9, 2026
7caf32e
fix(dashboard): calculate usability percentage from real evaluator data
Mar 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .firebaserc
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@
},
"etags": {},
"dataconnectEmulatorConfig": {}
}
}
2 changes: 1 addition & 1 deletion .github/workflows/i18n-diff-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: Run i18n diff guard
id: i18n_check
continue-on-error: true
run: node i18n-diff-guard.js
run: node i18n-diff-guard.mjs

- name: Post PR comment on failure
if: steps.i18n_check.outcome == 'failure'
Expand Down
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env sh
echo "🔍 running pre-commit hook"
node i18n-diff-guard.js
node i18n-diff-guard.mjs
npm run test
npx lint-staged
285 changes: 278 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,15 @@ Thank you for your interest in contributing to RUXAILAB! This document provides
- [Code Standards](#code-standards)
- [Testing](#testing)
- [Reporting Issues](#reporting-issues)
- [Issue Labeling Guide](#issue-labeling-guide)
- [Pre-commit Hooks](#pre-commit-hooks)

## Code of Conduct

We are committed to providing a welcoming and inclusive environment for all contributors. Please be respectful and constructive in all interactions.

For Code of Conduct discussions and support, please use our Discord channel: https://discord.com/channels/1209902463239593984/1209902463713288293

## Getting Started

RUXAILAB is a Vue.js-based platform for usability testing and heuristic evaluation. Before contributing, familiarize yourself with:
Expand Down Expand Up @@ -171,22 +175,22 @@ Then create a Pull Request on GitHub:
- Target the `develop` branch
- Provide a clear description of your changes
- Reference any related issues
- Keep at most **2 open Pull Requests** per contributor at any time (additional PRs are automatically closed by workflow)
- Wait for review and address any feedback

## Code Standards

### Formatting

We use **Prettier** for code formatting. Configuration is in `.prettierrc`.
We use **Prettier** for code formatting. Prettier is automatically applied through pre-commit hooks, so you don't need to manually format most of the time.

```bash
# Format all files
npm run format

# Check formatting
npm run format:check
# If needed, manually format files
npx prettier --write src/your-file.vue
```

See [Code Formatting Rules](#code-formatting-rules) section below for detailed information about formatting standards.

### Linting

We use **ESLint** for code quality. Configuration is in `eslint.config.mjs`.
Expand All @@ -199,6 +203,8 @@ npm run lint
npm run lint:fix
```

See [Code Formatting Rules](#code-formatting-rules) section below for detailed ESLint configuration information.

### Vue.js Best Practices

- Use Composition API for new components
Expand Down Expand Up @@ -255,6 +261,8 @@ npm run test:e2e:headed

## Reporting Issues

Each contributor may have a maximum of **5 open issues** at a time.

### Bug Reports

When reporting bugs, please include:
Expand Down Expand Up @@ -282,7 +290,270 @@ Use the [Feature Request template](https://github.com/uramakilab/remote-usabilit

For questions or general discussion, use [GitHub Discussions](https://github.com/uramakilab/remote-usability-lab/discussions).

## Additional Resources
## Issue Labeling Guide

Issues in RUXAILAB are automatically labeled based on the issue title format and content. Understanding how labels work helps with issue organization and discoverability.

### Auto-Applied Labels

Issues are automatically labeled when opened or edited. Here's how to use labels effectively:

#### 1. **Issue Type Labels** (Auto-applied based on title format)

Use conventional commit prefixes in your issue title to get proper type labels:

| Prefix | Label | Usage |
| ----------- | --------------- | ------------------------------ |
| `feat:` | `feature` | New features or enhancements |
| `fix:` | `bug` | Bug reports and fixes |
| `docs:` | `documentation` | Documentation improvements |
| `refactor:` | `refactor` | Code refactoring |
| `test:` | `tests` | Test additions or improvements |
| `perf:` | `performance` | Performance improvements |
| `ci:` | `ci` | CI/CD workflow changes |
| `chore:` | `chore` | Maintenance tasks |
| `build:` | `build` | Build system changes |
| `style:` | `style` | Formatting and style changes |

**Examples:**

- ✅ `feat: add dark mode support` → gets `feature` label
- ✅ `fix: correct navbar alignment` → gets `bug` label
- ✅ `docs: update installation guide` → gets `documentation` label
- ❌ `Add dark mode support` → no type label (ambiguous)

#### 2. **User Type Labels** (Auto-applied based on user role)

- **`maintainer-issue`** - Issues opened by maintainers and team members
- **`community-issue`** - Issues opened by community contributors

These labels help maintainers identify which issues come from the core team vs. the community.

#### 3. **Other Auto-Applied Labels**

- **`bug`** - Auto-applied for bug reports (if title contains `[bug]`, `🐞`, or matches bug template)
- **`help`** - Auto-applied if issue title or body mentions "help wanted" or "need help"

#### 4. **Manual Labels** (Applied by maintainers)

Some labels are applied manually by maintainers:

- **`good first issue`** - Good starting points for new contributors
- **`blocked`** - Issues blocked by other work
- **`wontfix`** - Issues that won't be worked on
- **`duplicate`** - Duplicate of another issue
- **`priority-high`** / **`priority-medium`** / **`priority-low`** - Issue priority levels
- **`security`** - Security-related issues
- **`dependencies`** - Dependency update issues

### Writing Issues with Proper Labels

To ensure your issue gets the correct labels:

1. **Use conventional commit format** for the title:

```
<type>(<scope>): <description>
```

- `type`: One of feat, fix, docs, refactor, test, perf, ci, chore, build, style
- `scope` (optional): Component or area affected, e.g., `auth`, `dashboard`
- `description`: Brief description

Examples:
- `feat(auth): add social login providers`
- `fix(ux-creation): resolve template duplication bug`
- `docs(api): update Firebase setup instructions`

2. **Use issue templates**: GitHub provides templates for bug reports and feature requests that auto-apply some labels

3. **Be clear and descriptive**: This helps maintainers understand the issue scope and apply additional labels correctly

## Pre-commit Hooks

This project uses **Husky** and **lint-staged** to automatically format and lint code before each commit. This ensures code quality standards are maintained.

### How It Works

When you commit changes, the following automatically runs:

1. **Husky** intercepts the commit
2. **lint-staged** runs linting and formatting on staged files:
- **ESLint** checks for code quality issues
- **Prettier** formats code for consistency

### Pre-commit Hook Rules

```bash
# Files matching src/**/*.{js,vue} will have:
- eslint --fix # Auto-fix ESLint issues
- prettier --write # Auto-format with Prettier
```

### Setup

Pre-commit hooks are set up automatically when you run:

```bash
npm install
```

This installs Husky and sets up the `.husky/pre-commit` hook.

### If Hooks Don't Run

If pre-commit hooks aren't running, initialize Husky:

```bash
npx husky install
```

### Skipping Pre-commit Hooks (Not Recommended)

If you absolutely need to skip the pre-commit hook, use:

```bash
git commit --no-verify
```

⚠️ **Warning**: This bypasses code quality checks. Avoid this in production code.

### Manual Code Quality Checks

You can also manually run these commands:

```bash
# Check for ESLint issues
npm run lint

# Auto-fix ESLint issues
npm run lint:fix

# Format code with Prettier (if needed manually)
npm run format

# Or use Prettier directly to format specific files
npx prettier --write src/your-file.vue
```

### Code Formatting Rules

#### Prettier Configuration

RUXAILAB uses Prettier for consistent code formatting. While there's no `.prettierrc` file, Prettier uses sensible defaults:

- **Print Width**: 80 characters
- **Tabs**: 2 spaces (no tabs)
- **Quotes**: Double quotes for strings
- **Semicolons**: Enabled
- **Trailing Commas**: ES5 style (where valid in older JS)
- **Arrow Functions**: Always add parentheses around parameters

#### ESLint Configuration

ESLint configuration is in `eslint.config.mjs`:

- **Parser**: Uses Vue 3 template parser with Babel support
- **Plugins**: Vue, Vuetify, Vue I18n
- **Extends**: Vue recommended rules, Vuetify recommendations, Prettier integration
- **Browsers Globals**: Browser APIs are available

Key rules enforced:

- Vue 3-specific syntax requirements
- Proper component structure
- No unused variables
- Proper i18n usage

### Vue.js Code Style Examples

#### ✅ Good Component Structure

```vue
<template>
<div class="card">
<h2>{{ title }}</h2>
<p>{{ description }}</p>
<v-btn @click="handleClick">{{ buttonText }}</v-btn>
</div>
</template>

<script setup>
import { computed, ref } from 'vue'

const props = defineProps({
title: {
type: String,
required: true,
},
description: {
type: String,
default: '',
},
})

const emit = defineEmits(['click'])

const count = ref(0)

const buttonText = computed(() => {
return count.value > 0 ? `Clicked ${count.value} times` : 'Click me'
})

function handleClick() {
count.value++
emit('click', count.value)
}
</script>

<style scoped>
.card {
padding: 1rem;
border: 1px solid var(--divider);
border-radius: 4px;
}
</style>
```

#### ✅ Good JavaScript Style

```javascript
// Use const by default, let if you need to reassign
const API_ENDPOINT = 'https://api.example.com'
let selectedUser = null

// Arrow functions for callbacks
const items = data.map((item) => ({
...item,
formatted: item.value.toUpperCase(),
}))

// Destructuring in function parameters
function processData({ name, age, email }) {
return {
name: name.trim(),
age: parseInt(age),
email: email.toLowerCase(),
}
}

// Use template literals
const message = `Hello, ${userName}! You have ${messageCount} new messages.`

// Async/await for promises
async function fetchUserData(userId) {
try {
const response = await fetch(`/api/users/${userId}`)
if (!response.ok) {
throw new Error(`API error: ${response.status}`)
}
return await response.json()
} catch (error) {
console.error('Failed to fetch user:', error)
throw error
}
}
```

- [README.md](README.md) - Project overview and setup
- [Vue.js Documentation](https://vuejs.org/)
Expand Down
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@ UX Remote LAB provides a collaborative environment for creators to share their p
- [Request a Feature 🚀](https://github.com/uramakilab/remote-usability-lab/issues/new)
- [Ask a Question 🤗](https://github.com/uramakilab/remote-usability-lab/discussions)

For commercial support, academic collaborations, and answers to common questions, please use [Get Support]() to contact us.
For commercial support, academic collaborations, and answers to common questions, please contact us by one of our communications channels:

- [Discord Server](https://discord.gg/YnkDk9BNYK)
- [Discussions](https://github.com/ruxailab/RUXAILAB/discussions)
- Email: `ruxailab@gmail.com`

### Development Environment

Expand Down Expand Up @@ -205,4 +209,4 @@ Visit `http://localhost:5000` in your browser to access the UX Remote LAB platfo

## License

MIT © [RUXAILAB](https://github.com/uramakilab/remote-usability-lab)
MIT © [RUXAILAB](https://github.com/ruxailab/RUXAILAB)
3 changes: 2 additions & 1 deletion functions/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ SMTP_USER=
SMTP_PASS=
SMTP_SECURE=
SITE_URL=
RUXAILAB_FUNCTIONS_REGION=
RUXAILAB_FUNCTIONS_REGION=
EYE_LAB_CORS_ORIGINS=
5 changes: 5 additions & 0 deletions functions/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
node_modules/

# Functions env files
.env
.env.*
!.env.example
Loading
Loading