I'm James Ross JrSenior Project ManagerFull-Stack Developer
Building the future of sales technology with modern web development and strategic project management. Welcome to my journey through enterprise consulting, innovation, and meaningful technology solutions.
Right Brain Group LLC
Senior Project Manager leading Routine.io development
Enterprise Experience
AHEAD Inc consulting, prison network engineering
Modern Tech Stack
Nuxt.js, Vue.js, Tailwind CSS, Supabase, AI Integration
James Ross's Journey
Every great developer has a story. Here's mine - James Ross's winding path of curiosity, challenges, breakthroughs, and continuous growth that shaped not just my technical skills, but my perspective on what it means to build meaningful technology.
James Ross's journey continues every day. Want to see what I'm building?
James Ross's Work
Each project represents a chapter in James Ross's development journey. From solving real-world problems to exploring cutting-edge technologies, here's a collection of work that showcases my growth, creativity, and commitment to building meaningful solutions.
Component Library in Action
Explore the actual components from James Ross's Deep Foundations UI library. See live examples, view source code, and interact with real implementations.
UiButton
ActionsA versatile button component with multiple variants, sizes, and states. Supports icons, loading states, and accessibility features.
Live Demo
Source Code
<template>
<component
:is="componentTag"
:class="buttonClasses"
:disabled="disabled || loading"
:type="href || to ? undefined : type"
v-bind="$attrs"
@click="handleClick"
>
<UiSpinner
v-if="loading"
:size="spinnerSize"
class="ui-button__spinner"
/>
<UiIcon
v-if="icon && iconPosition === 'left' && !loading"
:name="icon"
:size="iconSize"
class="ui-button__icon ui-button__icon--left"
/>
<span
v-if="$slots.default"
class="ui-button__content"
:class="{ 'ui-button__content--hidden': loading }"
>
<slot />
</span>
<UiIcon
v-if="icon && iconPosition === 'right' && !loading"
:name="icon"
:size="iconSize"
class="ui-button__icon ui-button__icon--right"
/>
</component>
</template>
<script setup lang="ts">
interface Props {
variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error'
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
type?: 'button' | 'submit' | 'reset'
disabled?: boolean
loading?: boolean
icon?: string
iconPosition?: 'left' | 'right'
}
const props = withDefaults(defineProps<Props>(), {
variant: 'primary',
size: 'md',
type: 'button',
iconPosition: 'left'
})
const emit = defineEmits<{
click: [event: MouseEvent]
}>()
const buttonClasses = computed(() => [
'ui-button',
`ui-button--${props.variant}`,
`ui-button--${props.size}`,
{
'ui-button--disabled': props.disabled,
'ui-button--loading': props.loading
}
])
</script>
Usage Example
<UiButton variant="primary" size="lg" @click="handleClick">
Click me
</UiButton>
<UiButton variant="secondary" icon="plus" :loading="isLoading">
Add Item
</UiButton>
Props
variant
stringButton style variant
size
stringButton size
disabled
booleanDisable the button
loading
booleanShow loading spinner
icon
stringIcon name to display
UiInput
FormsA comprehensive input component with validation, error states, and accessibility features built-in.
Live Demo
Source Code
<template>
<div class="ui-input-wrapper">
<label
v-if="label"
:for="inputId"
class="ui-input__label"
:class="{ 'ui-input__label--required': required }"
>
{{ label }}
</label>
<div class="ui-input__container">
<div v-if="$slots.prepend" class="ui-input__prepend">
<slot name="prepend" />
</div>
<input
:id="inputId"
ref="inputRef"
:class="inputClasses"
:type="type"
:value="modelValue"
:placeholder="placeholder"
:disabled="disabled"
:required="required"
:name="name"
v-bind="$attrs"
@input="handleInput"
@change="handleChange"
@focus="handleFocus"
@blur="handleBlur"
>
<div v-if="$slots.append" class="ui-input__append">
<slot name="append" />
</div>
</div>
<div v-if="error || hint" class="ui-input__help">
<p v-if="error" class="ui-input__error">{{ error }}</p>
<p v-else-if="hint" class="ui-input__hint">{{ hint }}</p>
</div>
</div>
</template>
<script setup lang="ts">
interface Props {
modelValue?: string | number
type?: 'text' | 'email' | 'password' | 'number'
label?: string
placeholder?: string
disabled?: boolean
required?: boolean
error?: string
hint?: string
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
}
const props = withDefaults(defineProps<Props>(), {
type: 'text',
size: 'md'
})
const emit = defineEmits<{
'update:modelValue': [value: string | number]
input: [event: Event]
change: [event: Event]
focus: [event: FocusEvent]
blur: [event: FocusEvent]
}>()
const inputRef = ref<HTMLInputElement>()
const inputId = computed(() => `ui-input-${Math.random().toString(36).substr(2, 9)}`)
const inputClasses = computed(() => [
'ui-input',
`ui-input--${props.size}`,
{
'ui-input--error': props.error,
'ui-input--disabled': props.disabled
}
])
</script>
Usage Example
<UiInput
v-model="email"
type="email"
label="Email Address"
placeholder="Enter your email"
:error="emailError"
required
/>
<UiInput v-model="search" placeholder="Search...">
<template #prepend>
<UiIcon name="search" />
</template>
</UiInput>
Props
modelValue
string | numberInput value
type
stringInput type
label
stringInput label
error
stringError message
required
booleanMark as required
UiCard
Data DisplayA flexible card component for displaying content with headers, footers, and various styling options.
Live Demo
Source Code
<template>
<div :class="cardClasses" v-bind="$attrs">
<div v-if="$slots.header || title" class="ui-card__header">
<div v-if="title || subtitle" class="ui-card__header-content">
<h3 v-if="title" class="ui-card__title">{{ title }}</h3>
<p v-if="subtitle" class="ui-card__subtitle">{{ subtitle }}</p>
</div>
<div v-if="$slots.header" class="ui-card__header-actions">
<slot name="header" />
</div>
</div>
<div v-if="image" class="ui-card__image">
<img :src="image" :alt="imageAlt" class="ui-card__img">
</div>
<div v-if="$slots.default" class="ui-card__body">
<slot />
</div>
<div v-if="$slots.footer" class="ui-card__footer">
<slot name="footer" />
</div>
</div>
</template>
<script setup lang="ts">
interface Props {
title?: string
subtitle?: string
image?: string
imageAlt?: string
elevated?: boolean
bordered?: boolean
hoverable?: boolean
variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'error'
}
const props = withDefaults(defineProps<Props>(), {
variant: 'primary',
elevated: true,
hoverable: false
})
const cardClasses = computed(() => [
'ui-card',
`ui-card--${props.variant}`,
{
'ui-card--elevated': props.elevated,
'ui-card--bordered': props.bordered,
'ui-card--hoverable': props.hoverable
}
])
</script>
Usage Example
<UiCard title="Card Title" subtitle="Card subtitle" hoverable>
<p>Card content goes here...</p>
<template #footer>
<UiButton variant="primary">Action</UiButton>
</template>
</UiCard>
<UiCard image="/image.jpg" imageAlt="Description">
<h4>Image Card</h4>
<p>Content with image header</p>
</UiCard>
Props
title
stringCard title
subtitle
stringCard subtitle
image
stringHeader image URL
elevated
booleanAdd elevation shadow
hoverable
booleanAdd hover effects
UiModal
FeedbackA fully accessible modal component with focus management, keyboard navigation, and backdrop controls.
Live Demo
Source Code
<template>
<Teleport to="body">
<Transition name="ui-modal" appear>
<div
v-if="modelValue"
class="ui-modal"
@click="handleBackdropClick"
@keydown.esc="handleEscape"
>
<div
ref="modalRef"
:class="modalClasses"
role="dialog"
:aria-modal="true"
:aria-labelledby="titleId"
tabindex="-1"
>
<div class="ui-modal__header">
<h3 v-if="title || $slots.title" :id="titleId" class="ui-modal__title">
<slot name="title">{{ title }}</slot>
</h3>
<UiButton
v-if="!persistent"
variant="text"
size="sm"
icon="x"
class="ui-modal__close"
@click="close"
aria-label="Close modal"
/>
</div>
<div class="ui-modal__body">
<slot />
</div>
<div v-if="$slots.footer" class="ui-modal__footer">
<slot name="footer" />
</div>
</div>
</div>
</Transition>
</Teleport>
</template>
<script setup lang="ts">
interface Props {
modelValue?: boolean
title?: string
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
persistent?: boolean
fullscreen?: boolean
}
const props = withDefaults(defineProps<Props>(), {
modelValue: false,
size: 'md',
persistent: false,
fullscreen: false
})
const emit = defineEmits<{
'update:modelValue': [value: boolean]
close: []
open: []
}>()
const modalRef = ref<HTMLElement>()
const titleId = computed(() => `ui-modal-title-${Math.random().toString(36).substr(2, 9)}`)
const modalClasses = computed(() => [
'ui-modal__content',
`ui-modal__content--${props.size}`,
{
'ui-modal__content--fullscreen': props.fullscreen
}
])
const close = () => {
emit('update:modelValue', false)
emit('close')
}
// Focus management and accessibility
watch(() => props.modelValue, (isOpen) => {
if (isOpen) {
nextTick(() => {
modalRef.value?.focus()
})
emit('open')
}
})
</script>
Usage Example
<UiModal v-model="showModal" title="Confirm Action" size="md">
<p>Are you sure you want to perform this action?</p>
<template #footer>
<UiButton variant="secondary" @click="showModal = false">
Cancel
</UiButton>
<UiButton variant="primary" @click="handleConfirm">
Confirm
</UiButton>
</template>
</UiModal>
Props
modelValue
booleanModal visibility state
title
stringModal title
size
stringModal size
persistent
booleanPrevent closing on backdrop click
fullscreen
booleanFullscreen modal
UiGrid
LayoutA responsive grid system with flexible columns, gaps, and breakpoint controls for modern layouts.
Live Demo
Source Code
<template>
<div :class="gridClasses" :style="gridStyles" v-bind="$attrs">
<slot />
</div>
</template>
<script setup lang="ts">
interface Props {
cols?: number | string | Record<string, number>
gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
responsive?: boolean
}
const props = withDefaults(defineProps<Props>(), {
cols: 12,
gap: 'md',
responsive: true
})
const gridClasses = computed(() => [
'ui-grid',
`ui-grid--gap-${props.gap}`,
{
'ui-grid--responsive': props.responsive
}
])
const gridStyles = computed(() => {
if (typeof props.cols === 'object') {
// Handle responsive columns
return {
'--ui-grid-cols-xs': props.cols.xs || 1,
'--ui-grid-cols-sm': props.cols.sm || 2,
'--ui-grid-cols-md': props.cols.md || 3,
'--ui-grid-cols-lg': props.cols.lg || 4
}
}
return {
'--ui-grid-cols': typeof props.cols === 'number' ? props.cols : props.cols
}
})
</script>
<style scoped>
.ui-grid {
display: grid;
grid-template-columns: repeat(var(--ui-grid-cols), minmax(0, 1fr));
}
.ui-grid--responsive {
grid-template-columns: repeat(var(--ui-grid-cols-xs, 1), minmax(0, 1fr));
}
@media (min-width: 640px) {
.ui-grid--responsive {
grid-template-columns: repeat(var(--ui-grid-cols-sm, 2), minmax(0, 1fr));
}
}
@media (min-width: 768px) {
.ui-grid--responsive {
grid-template-columns: repeat(var(--ui-grid-cols-md, 3), minmax(0, 1fr));
}
}
@media (min-width: 1024px) {
.ui-grid--responsive {
grid-template-columns: repeat(var(--ui-grid-cols-lg, 4), minmax(0, 1fr));
}
}
.ui-grid--gap-xs { gap: 0.25rem; }
.ui-grid--gap-sm { gap: 0.5rem; }
.ui-grid--gap-md { gap: 1rem; }
.ui-grid--gap-lg { gap: 1.5rem; }
.ui-grid--gap-xl { gap: 2rem; }
</style>
Usage Example
<UiGrid :cols="{ xs: 1, sm: 2, md: 3, lg: 4 }" gap="lg">
<UiCard v-for="item in items" :key="item.id">
{{ item.title }}
</UiCard>
</UiGrid>
<UiGrid cols="3" gap="md">
<div>Column 1</div>
<div>Column 2</div>
<div>Column 3</div>
</UiGrid>
Props
cols
number | string | objectNumber of columns or responsive object
gap
stringGap size between grid items
responsive
booleanEnable responsive behavior
Deep Foundations UI Library
A comprehensive, production-ready component library built with modern web standards
Featured Projects

Routine.io - Sales OS Platform
James Ross is leading the development of Routine.io, a comprehensive Sales OS Platform that transforms how sales teams interact with their CRMs through intelligent automation and insights.

M.A.G.I.C. - Career Catalyst Framework
James Ross developed M.A.G.I.C., a comprehensive career development framework built in Notion.so that helps professionals systematically advance their careers through structured goal-setting and progress tracking.

EcoTracker Sustainability Platform
A comprehensive sustainability tracking application developed by James Ross that helps users monitor their carbon footprint and adopt eco-friendly habits through gamification and community features.
Additional Projects

Enterprise Network Infrastructure
James Ross designed and implemented a comprehensive network infrastructure for a correctional facility, managing critical systems and ensuring 99.9% uptime for essential services.

AI-Powered Learning Path Generator
An AI-powered platform created by James Ross that generates personalized learning paths based on user goals, current skills, and learning preferences, with real-time adaptation based on progress.
Interested in seeing more detailed case studies of James Ross's technical work?
View All Projects on GitHubBeyond the Code
Great developers aren't just defined by their technical skills. Here's a glimpse into the passions, hobbies, and experiences that shape James Ross's perspective, fuel my creativity, and keep me balanced in this fast-paced digital world.

Adventure Photography
James Ross captures the raw beauty of nature through the lens, from mountain peaks to hidden waterfalls. Photography has taught me patience, composition, and the art of finding beauty in unexpected places.

Urban Gardening
James Ross grows herbs and vegetables in small spaces, connecting with the earth even in the city. This hobby has taught me patience, sustainability, and the satisfaction of nurturing something from seed to harvest.

Community Volunteering
James Ross teaches coding basics to underrepresented youth in my community. There's nothing more rewarding than seeing someone's face light up when they build their first website.

Artisan Coffee
James Ross explores the science and art of coffee brewing. From pour-overs to espresso, each cup is an experiment in precision and patience - much like debugging code!

Weekend Hiking
James Ross finds clarity and inspiration on mountain trails. Some of my best problem-solving happens when I'm disconnected from screens and connected to nature.

Mechanical Keyboards
James Ross builds custom keyboards with different switches and layouts. It's a perfect blend of craftsmanship, ergonomics, and the tools of my trade - because developers deserve great typing experiences.

Cooking Adventures
James Ross experiments with cuisines from around the world. Cooking, like coding, requires following recipes (documentation), understanding processes, and iterating to perfect the final product.

Board Game Strategy
James Ross explores complex strategy games that challenge logical thinking and planning. These games exercise the same problem-solving muscles I use in development, but in a fun, social setting.
James Ross's Personal Philosophy
"The best developers are not just technically proficient—they're curious humans who bring diverse perspectives, empathy, and creativity to everything they build. My experiences outside of coding inform my approach to problem-solving, user experience, and collaboration." — James Ross
Curiosity-Driven
Every hobby teaches James Ross something new that I can apply to development work—patience from gardening, composition from photography, strategy from board games.
Community-Focused
Whether volunteering in my local community or contributing to open source, James Ross believes technology should serve people and bring us together.
Balance-Seeking
Great code comes from a clear mind. James Ross's adventures in nature, creative pursuits, and physical activities keep me energized and innovative.
Let's Connect
James Ross Jr is always excited to connect with fellow developers, potential collaborators, and anyone interested in building something meaningful together. Whether you have a project in mind, want to discuss technology, or just want to say hello—I'd love to hear from you.
james@jamesrossjr.com
Professional Network
GitHub
Open Source Projects
Resume
Download PDF
Ready to Build Something Amazing with James Ross Jr?
James Ross Jr is particularly interested in projects that combine technology with positive social impact, innovative user experiences, and opportunities to learn new technologies. If you're working on something exciting, I'd love to hear about it.
Full-Stack Development
End-to-end web applications with modern technologies
Technical Consulting
Architecture reviews, code audits, and technology recommendations
Mentoring & Teaching
Helping developers grow their skills and advance their careers