Skip to content

Commit d295e93

Browse files
authored
Merge pull request #60 from zouhir96/develop
release 2.0.1
2 parents c31e6a9 + fb9365f commit d295e93

File tree

36 files changed

+284
-435
lines changed

36 files changed

+284
-435
lines changed

README.md

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<table align="center">
44
<tr>
55
<td>
6-
<img src="imgs/preview.svg" alt="Preview image" />
6+
<img src="imgs/thumbnail.png" alt="Preview image" />
77
</td>
88
</tr>
99
</table>
@@ -21,19 +21,37 @@ TypeScript all visualized in an intuitive interface.
2121
This is the Mobile(Non official) version of [hackertab.dev](https://hackertab.dev) extension brought to your
2222
phone now so you stay always posted even if you’re not on your pc.
2323

24-
## Demo
25-
26-
<table align="center">
27-
<tr>
28-
<td>
29-
<img src="imgs/demo.gif" alt="Hackertab Android & IOS" />
30-
</td>
31-
</tr>
32-
</table>
33-
3424
## ⬇️ Download
3525

36-
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="90"/>](https://play.google.com/store/apps/details?id=com.zrcoding.hackertab)<br>
26+
<div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; align-items: center;">
27+
<a href="https://play.google.com/store/apps/details?id=com.zrcoding.hackertab" style="display: inline-block;">
28+
<img src="imgs/playstore.png" alt="Get it on Google Play" height="80" style="max-width: 100%; height: auto;"/>
29+
</a>
30+
<a href="https://apps.apple.com/us/app/hackertab-unofficial/id6746347807" style="display: inline-block;">
31+
<img src="imgs/appstore.png" alt="Get it on App Store" height="80" style="max-width: 100%; height: auto;"/>
32+
</a>
33+
</div>
34+
35+
<style>
36+
/* Responsive layout for download buttons */
37+
@media (max-width: 768px) {
38+
div[style*="display: flex"] {
39+
flex-direction: column !important;
40+
gap: 15px !important;
41+
}
42+
}
43+
44+
@media (min-width: 769px) {
45+
div[style*="display: flex"] {
46+
flex-direction: row !important;
47+
justify-content: center !important;
48+
gap: 30px !important;
49+
}
50+
}
51+
</style>
52+
53+
<br>
54+
3755
You can check the [releases](https://github.com/zouhir96/hackertab-android/releases/latest) page for
3856
details.
3957

@@ -50,14 +68,16 @@ details.
5068
- Github actions: Run tests, deploy to google play
5169

5270
## 🛠️ Resources
71+
5372
- Figma: [Design file](https://www.figma.com/file/IMFz1yU7jLCIQL1ZM0X8t7/Hackertab?type=design&node-id=0-1&mode=design&t=7yYklSUnlheLkOaN-0)
5473
- Trello: [Project board](https://trello.com/b/OaxWzI96/hackertab)
5574

5675
### Features
5776

5877
- [x] 11 sources of news: Github, Hackernews, Conferences, Devto, Producthunt, Reddit, Lobsters,
59-
Hashnode, Freecodecamp, IndieHackers and Medium.
78+
Hashnode, Freecodecamp, IndieHackers and Medium.
6079
- [x] 26 Topics to follow: Android, Kotlin, Java, JavaScript, TypeScript ...
80+
- [x] Onboarding and app setup
6181
- [x] Possibility to configure which sources to follow.
6282
- [x] Possibility to configure which topics to follow.
6383
- [x] Contact support by email.
@@ -68,7 +88,6 @@ details.
6888
### Development
6989

7090
- [ ] Add offline first support
71-
- [ ] Add onboarding and app install setup
7291

7392
## 🧩 Requirements
7493

app/build.gradle.kts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,6 @@ android {
4949
targetCompatibility = JavaVersion.VERSION_17
5050
}
5151

52-
kotlinOptions {
53-
jvmTarget = libs.versions.jvmTarget.get()
54-
}
55-
5652
buildFeatures {
5753
buildConfig = true
5854
}
@@ -63,6 +59,10 @@ android {
6359
}
6460
}
6561

62+
kotlin {
63+
jvmToolchain(17)
64+
}
65+
6666
dependencies {
6767
implementation(project(":shared"))
6868

core/analytics/src/commonMain/kotlin/com/zrcoding/hackertab/analytics/models/AnalyticsEvent.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ data class AnalyticsEvent(
2020
const val SETUP_COMPLETED = "setup_completed"
2121
const val TOPIC_SELECTION_CHANGED = "topic_selection_changed"
2222
const val SOURCE_SELECTION_CHANGED = "source_selection_changed"
23+
const val SOURCE_FILTER_CHANGED = "source_filter_changed"
2324
const val TOPIC_FILTER_CHANGED = "topic_filter_changed"
2425
// Add more standard event types here
2526
}

core/data/src/commonMain/kotlin/com/zrcoding/hackertab/data/mappers/Mappers.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ import com.zrcoding.hackertab.network.dtos.ConferenceDto
1616
import com.zrcoding.hackertab.network.dtos.GithubDto
1717
import com.zrcoding.hackertab.network.dtos.IndieHackersDto
1818
import com.zrcoding.hackertab.network.dtos.ProductHuntDto
19-
import kotlinx.datetime.Clock
20-
import kotlinx.datetime.Instant
2119
import kotlinx.datetime.LocalDateTime
2220
import kotlinx.datetime.TimeZone
2321
import kotlinx.datetime.toLocalDateTime
22+
import kotlin.time.Clock
23+
import kotlin.time.ExperimentalTime
24+
import kotlin.time.Instant
2425

26+
@OptIn(ExperimentalTime::class)
2527
fun Long.toZonedLocalDate(): LocalDateTime = Instant.fromEpochMilliseconds(this)
2628
.toLocalDateTime(TimeZone.currentSystemDefault())
2729

@@ -32,12 +34,12 @@ fun ArticleDto.toFreeCodeCamp() = FreeCodeCamp(
3234
title = title,
3335
url = url,
3436
isoDate = publishedAt.toZonedLocalDate(),
35-
categories = tags.orEmpty()
37+
categories = tags.orEmpty().take(4)
3638
)
3739

3840
fun GithubDto.toGithubRepo() = GithubRepo(
3941
id = id,
40-
name = title,
42+
title = title,
4143
description = description,
4244
owner = owner,
4345
url = url,
@@ -108,6 +110,7 @@ fun ProductHuntDto.toProductHunt() = ProductHunt(
108110
tags = tags.orEmpty().take(1)
109111
)
110112

113+
@OptIn(ExperimentalTime::class)
111114
fun IndieHackersDto.toIndieHackers() = IndieHackers(
112115
id = id ?: Clock.System.now().toEpochMilliseconds().toString(),
113116
title = title,

core/design/src/commonMain/composeResources/drawable/ic_hackertab.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
android:viewportWidth="364.016"
55
android:viewportHeight="28.141">
66
<path
7-
android:fillColor="@color/black"
7+
android:fillColor="#000000"
88
android:pathData="M7.008,24.626L0.008,24.626L0.008,0.126L7.008,0.126L7.008,7.126L21.008,7.126L21.008,10.626L24.508,10.626L24.508,24.626L17.508,24.626L17.508,10.626L7.008,10.626L7.008,24.626ZM52.503,24.626L31.503,24.626L31.503,21.126L28.003,21.126L28.003,17.626L31.503,17.626L31.503,14.126L45.503,14.126L45.503,10.626L31.503,10.626L31.503,7.126L49.003,7.126L49.003,10.626L52.503,10.626L52.503,24.626ZM35.003,17.626L35.003,21.126L45.503,21.126L45.503,17.626L35.003,17.626ZM80.499,24.626L59.499,24.626L59.499,21.126L55.999,21.126L55.999,10.626L59.499,10.626L59.499,7.126L80.499,7.126L80.499,10.626L62.999,10.626L62.999,21.126L80.499,21.126L80.499,24.626ZM90.994,24.626L83.994,24.626L83.994,0.126L90.994,0.126L90.994,14.126L97.994,14.126L97.994,10.626L101.494,10.626L101.494,7.126L108.494,7.126L108.494,10.626L104.994,10.626L104.994,14.126L101.494,14.126L101.494,17.626L104.994,17.626L104.994,21.126L108.494,21.126L108.494,24.626L101.494,24.626L101.494,21.126L97.994,21.126L97.994,17.626L90.994,17.626L90.994,24.626ZM132.989,24.626L115.489,24.626L115.489,21.126L111.989,21.126L111.989,10.626L115.489,10.626L115.489,7.126L132.989,7.126L132.989,10.626L136.489,10.626L136.489,17.626L118.989,17.626L118.989,21.126L132.989,21.126L132.989,24.626ZM118.989,10.626L118.989,14.126L129.489,14.126L129.489,10.626L118.989,10.626ZM150.485,7.126L150.485,10.626L153.985,10.626L153.985,14.126L150.485,14.126L150.485,24.626L143.485,24.626L143.485,7.126L150.485,7.126ZM153.985,7.126L164.485,7.126L164.485,10.626L153.985,10.626L153.985,7.126ZM185.48,24.626L178.48,24.626L178.48,10.626L171.48,10.626L171.48,7.126L178.48,7.126L178.48,0.126L185.48,0.126L185.48,7.126L192.48,7.126L192.48,10.626L185.48,10.626L185.48,24.626ZM220.476,24.626L199.476,24.626L199.476,21.126L195.976,21.126L195.976,17.626L199.476,17.626L199.476,14.126L213.476,14.126L213.476,10.626L199.476,10.626L199.476,7.126L216.976,7.126L216.976,10.626L220.476,10.626L220.476,24.626ZM202.976,17.626L202.976,21.126L213.476,21.126L213.476,17.626L202.976,17.626ZM244.971,24.626L227.471,24.626L227.471,21.126L223.971,21.126L223.971,0.126L230.971,0.126L230.971,7.126L244.971,7.126L244.971,10.626L248.471,10.626L248.471,21.126L244.971,21.126L244.971,24.626ZM230.971,10.626L230.971,21.126L241.471,21.126L241.471,10.626L230.971,10.626ZM265.966,24.626L258.966,24.626L258.966,17.626L265.966,17.626L265.966,24.626ZM304.462,24.626L283.462,24.626L283.462,21.126L279.962,21.126L279.962,10.626L283.462,10.626L283.462,7.126L297.462,7.126L297.462,0.126L304.462,0.126L304.462,24.626ZM286.962,10.626L286.962,21.126L297.462,21.126L297.462,10.626L286.962,10.626ZM328.957,24.626L311.457,24.626L311.457,21.126L307.957,21.126L307.957,10.626L311.457,10.626L311.457,7.126L328.957,7.126L328.957,10.626L332.457,10.626L332.457,17.626L314.957,17.626L314.957,21.126L328.957,21.126L328.957,24.626ZM314.957,10.626L314.957,14.126L325.457,14.126L325.457,10.626L314.957,10.626ZM353.452,24.626L346.452,24.626L346.452,21.126L342.952,21.126L342.952,17.626L339.452,17.626L339.452,7.126L346.452,7.126L346.452,17.626L353.452,17.626L353.452,7.126L360.452,7.126L360.452,17.626L356.952,17.626L356.952,21.126L353.452,21.126L353.452,24.626Z"/>
99
</vector>

core/design/src/commonMain/kotlin/com/zrcoding/hackertab/design/theme/Color.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package com.zrcoding.hackertab.design.theme
22

33
import androidx.compose.ui.graphics.Color
44

5+
val Black = Color(0xFF000000)
6+
val Black900 = Color(0xFF272728)
7+
val Black700 = Color(0xFF575758)
8+
val Black400 = Color(0xFF9F9F9F)
59

610
val Blue = Color(0XFF0366D6)
711
val Flamingo = Color(0xFFf6682f)
812
val ChestnutRose = Color(0xFFCF6679)
913
val ChineseBlack = Color(0xFF0D1116)
10-
val Black900 = Color(0xFF272728)
1114
val HawkesBlue = Color(0xFFEFF6FE)
1215
val White600 = Color(0xFFF9F9F9)

core/design/src/commonMain/kotlin/com/zrcoding/hackertab/design/theme/Theme.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ import androidx.compose.material.MaterialTheme
55
import androidx.compose.material.darkColors
66
import androidx.compose.material.lightColors
77
import androidx.compose.runtime.Composable
8-
import androidx.compose.ui.graphics.Color
98

109
private val DarkColorPalette = darkColors(
1110
primary = Blue,
1211
primaryVariant = ChineseBlack,
1312
secondary = Black900,
14-
secondaryVariant = Color.Black,
13+
secondaryVariant = Black900,
1514
background = ChineseBlack,
1615
error = ChestnutRose
1716
)
@@ -20,7 +19,7 @@ private val LightColorPalette = lightColors(
2019
primary = Blue,
2120
primaryVariant = HawkesBlue,
2221
secondary = White600,
23-
secondaryVariant = Color.White,
22+
secondaryVariant = White600,
2423
background = HawkesBlue,
2524
error = ChestnutRose
2625
)

core/design/src/commonMain/kotlin/com/zrcoding/hackertab/design/theme/Type.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ val Typography: Typography
3030
fontSize = 20.sp
3131
),
3232
subtitle1 = TextStyle(
33-
fontFamily = FontFamily(Font(Res.font.nunito_regular)),
33+
fontFamily = FontFamily(Font(Res.font.nunito_medium)),
3434
fontWeight = FontWeight.Normal,
35-
fontSize = 16.sp,
35+
fontSize = 18.sp,
3636
letterSpacing = 0.15.sp
3737
),
3838
subtitle2 = TextStyle(
39-
fontFamily = FontFamily(Font(Res.font.nunito_medium)),
39+
fontFamily = FontFamily(Font(Res.font.nunito_regular)),
4040
fontWeight = FontWeight.W500,
4141
fontSize = 14.sp,
4242
letterSpacing = 0.1.sp

core/domain/src/commonMain/kotlin/com/zrcoding/hackertab/domain/models/GithubRepo.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.zrcoding.hackertab.domain.models
22

33
data class GithubRepo(
44
override val id: String,
5-
val name: String,
5+
val title: String,
66
val description: String,
77
val owner: String,
88
val url: String,

core/domain/src/commonMain/kotlin/com/zrcoding/hackertab/domain/usecases/BuildConferenceDisplayedDateUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ object BuildConferenceDisplayedDateUseCase {
1414
if (startDate.month != endDate.month) {
1515
"$start - ${toMonthWithDay(endDate)}"
1616
} else {
17-
"$start - ${endDate.dayOfMonth}"
17+
"$start - ${endDate.day}"
1818
}
1919
}
2020
}
@@ -25,6 +25,6 @@ object BuildConferenceDisplayedDateUseCase {
2525
val month = date.month.name.lowercase().replaceFirstChar {
2626
if (it.isLowerCase()) it.titlecase() else it.toString()
2727
}
28-
return "$month ${date.dayOfMonth}"
28+
return "$month ${date.day}"
2929
}
3030
}

0 commit comments

Comments
 (0)