Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
53d3fbc
Initial commit
kaseywright Jan 22, 2026
0f6a556
init commit
kaseywright Feb 6, 2026
6a76a51
Add architecture documentation with directory structure
kaseywright Mar 4, 2026
5fe964e
bump version
kaseywright Mar 4, 2026
af6deec
Initial commit
B3RN153 Mar 9, 2026
50d456f
Established a local enviroment in react native cli
B3RN153 Mar 10, 2026
345ef93
Updated README
B3RN153 Mar 10, 2026
d3b3002
Updated README
B3RN153 Mar 10, 2026
3f598f0
Edited README
B3RN153 Mar 10, 2026
68951ce
updated package.json
B3RN153 Mar 11, 2026
4f36a30
added fluent logo
B3RN153 Mar 11, 2026
93dfb2e
Update bundle identifier
B3RN153 Mar 11, 2026
c3e51a9
Added format
B3RN153 Mar 12, 2026
be2d70e
Basic Navigation
B3RN153 Mar 13, 2026
469e24f
lint and github actions
B3RN153 Mar 13, 2026
781c889
lint and github actions
B3RN153 Mar 13, 2026
1ca2152
Updated readme
Joel-Joseph-George Mar 16, 2026
20db4e1
Resolved conflicts
B3RN153 Mar 17, 2026
f14a208
Handled deprecations
B3RN153 Mar 19, 2026
763298d
test fluent api integration (#13)
LijuJacob08 Mar 30, 2026
16743f1
installed opsqlite
B3RN153 Mar 27, 2026
2482503
installed TanStack
B3RN153 Apr 2, 2026
781babc
Updated sqlite package
B3RN153 Apr 14, 2026
4db7d19
Database initialised
B3RN153 Apr 14, 2026
f7efc3a
updations in read me
Joel-Joseph-George Apr 10, 2026
3db7fec
specified the node version
vipinpaul Apr 14, 2026
122a81b
Added env
B3RN153 Apr 14, 2026
af4cf88
Api integrations
B3RN153 Apr 14, 2026
05372e5
Wipe expo starter for PoC merge
kaseywright Apr 14, 2026
35b7659
Mvp poc mobile companion app (#11)
B3RN153 Apr 14, 2026
58ca4d7
Resolved conflicts
B3RN153 Apr 15, 2026
42cd9b5
Defined types in place of any
B3RN153 Apr 15, 2026
ce627da
Implemented logging
B3RN153 Apr 15, 2026
0efd7ce
added logger test
B3RN153 Apr 16, 2026
0645a30
Rearchtectured the project files structure
B3RN153 Apr 16, 2026
dc8d89e
Fixed issues given in the comments
B3RN153 Apr 17, 2026
bc79c7f
fix: prevent test crash by mocking env variables
B3RN153 Apr 17, 2026
1e18003
Task/mobile api integration and initial datasync (#20)
B3RN153 Apr 17, 2026
d76e559
Resolve merge conflicts
B3RN153 Apr 17, 2026
083ae5c
Remove unwanted files
B3RN153 Apr 19, 2026
6b45200
Merge remote-tracking branch 'origin/main' into task/architecture_of_…
B3RN153 Apr 20, 2026
5f90716
removed files
B3RN153 Apr 20, 2026
3188a7c
remove .env file
B3RN153 Apr 20, 2026
a7d2714
Added files to eslint.config.ts
B3RN153 Apr 21, 2026
ea6cdcb
updated .gitignore'
B3RN153 Apr 21, 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
5 changes: 0 additions & 5 deletions .env

This file was deleted.

2 changes: 2 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,6 @@ jobs:
run: npm ci

- name: Run tests
env:
FLUENT_USER_EMAIL: 'test@example.com'
run: npm test -- --ci
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,7 @@ yarn-error.log
!.yarn/releases
!.yarn/sdks
!.yarn/versions

# Environment files
.env
.env.*
2 changes: 1 addition & 1 deletion App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { initializeDatabase } from './src/db/index';
import AppNavigator from './src/navigation/AppNavigator';
import { NavigationContainer } from '@react-navigation/native';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { syncAllData } from './src/services/syncServices';
import { syncAllData } from './src/services/sync';
import { FLUENT_USER_EMAIL } from '@env';

const log = logger.create('App');
Expand Down
4 changes: 2 additions & 2 deletions __tests__/App.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jest.mock('../src/navigation/AppNavigator', () => {
const { View } = require('react-native');
return () => MockReact.createElement(View, { testID: 'app-navigator' });
});
jest.mock('../src/api/fluent-api.test', () => ({
jest.mock('../src/services/fluent-api.test', () => ({
runApiIntegrationTest: jest.fn(() => Promise.resolve()),
}));

Expand All @@ -63,7 +63,7 @@ jest.mock('../src/db/index', () => ({
initializeDatabase: jest.fn(() => Promise.resolve()),
}));

jest.mock('../src/services/syncServices', () => ({
jest.mock('../src/services/sync', () => ({
syncAllData: jest.fn(() => Promise.resolve()),
}));

Expand Down
9 changes: 9 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,15 @@ export default [
rules: {
'jest/no-disabled-tests': 'warn',
'jest/no-focused-tests': 'error',
'no-console': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
},
{
files: ['src/utils/logger.ts'],
rules: {
'no-console': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
},
];
200 changes: 200 additions & 0 deletions src/app/appStyles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
import { StyleSheet } from 'react-native';

export const appStyles = StyleSheet.create({
container: {
flex: 1,
paddingHorizontal: 16,
},
centered: {
justifyContent: 'center',
},
titleLg: {
fontSize: 20,
fontWeight: '700',
},
titleMd: {
fontSize: 18,
fontWeight: '700',
},
subtitle: {
fontSize: 14,
marginTop: 2,
},
sectionHeaderText: {
fontSize: 16,
fontWeight: '500',
},
cardTitle: {
fontSize: 16,
fontWeight: '600',
},
cardSubtitle: {
fontSize: 14,
marginTop: 3,
},
emptyText: {
color: '#666',
fontSize: 16,
},
noVersesText: {
fontSize: 14,
color: '#999',
},
listContent: {
gap: 12,
},
scrollContent: {
gap: 12,
paddingBottom: 8,
},
cardRow: {
flexDirection: 'row',
alignItems: 'center',
borderRadius: 12,
borderWidth: 1,
borderColor: '#d1d1d6',
padding: 16,
gap: 12,
},
cardColumn: {
borderRadius: 12,
borderWidth: 1,
borderColor: '#d1d1d6',
padding: 16,
},
cardText: {
flex: 1,
},
backBtn: {
flexDirection: 'row',
alignItems: 'center',
gap: 8,
paddingVertical: 20,
},
logoContainer: {
alignItems: 'center',
paddingVertical: 28,
},
sectionHeader: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
gap: 10,
borderWidth: 1,
borderColor: '#d1d1d6',
borderRadius: 12,
padding: 14,
marginBottom: 12,
},
playerRow: {
flexDirection: 'row',
alignItems: 'center',
gap: 10,
marginBottom: 12,
},
playBtn: {
width: 36,
height: 36,
borderRadius: 18,
backgroundColor: '#1a6ef5',
alignItems: 'center',
justifyContent: 'center',
},
progressTrack: {
flex: 1,
height: 4,
backgroundColor: '#e0e0e0',
borderRadius: 2,
},
progressFill: {
width: '20%',
height: 4,
backgroundColor: '#1a6ef5',
borderRadius: 2,
},
progressFillRecorded: {
width: '40%',
height: 4,
backgroundColor: '#1a6ef5',
borderRadius: 2,
},
accordionHeader: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
borderWidth: 1,
borderColor: '#d1d1d6',
borderRadius: 8,
paddingHorizontal: 14,
paddingVertical: 10,
marginTop: 4,
},
accordionLabel: {
fontSize: 14,
},
sourceTextScroll: {
maxHeight: 120,
marginTop: 10,
borderRadius: 8,
paddingHorizontal: 12,
},
sourceText: {
fontSize: 14,
lineHeight: 24,
color: '#333',
},
recordBtn: {
width: 64,
height: 64,
borderRadius: 32,
backgroundColor: '#e53935',
alignItems: 'center',
justifyContent: 'center',
alignSelf: 'center',
marginVertical: 12,
},
deleteBtn: {
width: 48,
height: 48,
borderRadius: 24,
backgroundColor: '#e53935',
alignItems: 'center',
justifyContent: 'center',
alignSelf: 'center',
marginTop: 8,
},
chipsScroll: {
flexGrow: 0,
paddingVertical: 12,
},
chipsContent: {
gap: 8,
paddingHorizontal: 2,
},
chip: {
minWidth: 48,
paddingHorizontal: 14,
paddingVertical: 12,
borderRadius: 10,
borderWidth: 1,
borderColor: '#d1d1d6',
alignItems: 'center',
justifyContent: 'center',
},
activeChip: {
borderWidth: 2,
borderColor: '#1a6ef5',
},
chipText: {
fontSize: 16,
},
activeChipText: {
color: '#1a6ef5',
fontWeight: '600',
},
chipMic: {
position: 'absolute',
top: 3,
right: 4,
},
});
60 changes: 4 additions & 56 deletions src/screens/main/ProjectList.tsx → src/app/tabs/ProjectList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ import {
Text,
FlatList,
TouchableOpacity,
StyleSheet,
ActivityIndicator,
} from 'react-native';
import { logger } from '../../utils/logger';
import { Project } from '../../types/dbTypes';
import { Project } from '../../types/db/types';
import { getProjects } from '../../db/queries';
import { useNavigation } from '@react-navigation/native';
import FluentLogo from '../../assets/icons/fluent-logo.svg';
import { RootStackParamList } from '../../navigation/types';
import { RootStackParamList } from '../../types/navigation/types';
import { StackNavigationProp } from '@react-navigation/stack';
import { Ionicons } from '@react-native-vector-icons/ionicons';
import { appStyles as styles } from '../appStyles';

const log = logger.create('ProjectListScreen');
type Nav = StackNavigationProp<RootStackParamList, 'Projects'>;
Expand Down Expand Up @@ -64,7 +64,7 @@ export default function ProjectsScreen() {
contentContainerStyle={styles.listContent}
renderItem={({ item }) => (
<TouchableOpacity
style={styles.card}
style={styles.cardRow}
activeOpacity={0.7}
onPress={() =>
navigation.navigate('Chapters', {
Expand All @@ -88,55 +88,3 @@ export default function ProjectsScreen() {
</View>
);
}

const styles = StyleSheet.create({
container: {
flex: 1,
paddingHorizontal: 16,
},
logoContainer: {
alignItems: 'center',
paddingVertical: 28,
},
sectionHeader: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
gap: 10,
borderWidth: 1,
borderColor: '#d1d1d6',
borderRadius: 12,
padding: 14,
marginBottom: 12,
},
sectionHeaderText: {
fontSize: 16,
fontWeight: '500',
},
listContent: {
gap: 12,
},
card: {
flexDirection: 'row',
alignItems: 'center',
borderRadius: 12,
borderWidth: 1,
borderColor: '#d1d1d6',
padding: 16,
gap: 12,
},
cardText: {
flex: 1,
},
cardTitle: {
fontSize: 16,
fontWeight: '600',
},
cardSubtitle: {
fontSize: 14,
marginTop: 3,
},
centered: {
justifyContent: 'center',
},
});
Loading
Loading