+- [@samuelclay](https://x.com/samuelclay) on X/Twitter.
## License
diff --git a/apps/newsletters/amazon-ses-lambda.py b/apps/newsletters/amazon-ses-lambda.py
new file mode 100644
index 000000000..fc7decd34
--- /dev/null
+++ b/apps/newsletters/amazon-ses-lambda.py
@@ -0,0 +1,34 @@
+import json
+import requests
+import boto3
+import email
+
+
+def lambda_handler(event, context):
+ # Get the message ID for the email
+ message_id = event["Records"][0]["ses"]["mail"]["messageId"]
+
+ # Retrieve the email content from S3 if configured to store
+ s3_client = boto3.client("s3")
+ bucket_name = "newsblur-email-logs"
+ email_data = s3_client.get_object(Bucket=bucket_name, Key=message_id)
+ raw_email = email_data["Body"].read().decode("utf-8")
+
+ # Parse the raw email
+ parsed_email = email.message_from_string(raw_email)
+
+ # Prepare the payload for the webhook
+ # Include original recipient
+ payload = {
+ "from": parsed_email["From"],
+ "to": parsed_email["To"],
+ "subject": parsed_email["Subject"],
+ "body": parsed_email.get_payload(),
+ "original_recipient": parsed_email["X-Original-Recipient"],
+ }
+
+ # Send to webhook
+ webhook_url = "https://push.newsblur.com/newsletters/receive/"
+ response = requests.post(webhook_url, json=payload)
+
+ return {"statusCode": response.status_code, "body": json.dumps("Email forwarded to webhook")}
diff --git a/media/css/pages/welcome.css b/media/css/pages/welcome.css
index aec9eb6b6..545058613 100644
--- a/media/css/pages/welcome.css
+++ b/media/css/pages/welcome.css
@@ -169,7 +169,7 @@
height: 300px;
position: absolute;
bottom: -350px;
- right: -40px;
+ right: 0;
border-radius: 2px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
@@ -180,7 +180,7 @@
height: 300px;
position: absolute;
bottom: -300px;
- right: 0;
+ right: -80px;
border-radius: 2px;
margin-right: 100px;
border-top-left-radius: 4px;
diff --git a/media/img/iphone/Sketch-AppStore-Shots-2.2.sketch b/media/img/iphone/Sketch-AppStore-Shots-2.2.sketch
index ca460c028..d755b13ca 100755
Binary files a/media/img/iphone/Sketch-AppStore-Shots-2.2.sketch and b/media/img/iphone/Sketch-AppStore-Shots-2.2.sketch differ
diff --git a/media/img/iphone/iphone-16.png b/media/img/iphone/iphone-16.png
new file mode 100644
index 000000000..34f2c6176
Binary files /dev/null and b/media/img/iphone/iphone-16.png differ
diff --git a/media/img/welcome/header-ios-original.png b/media/img/welcome/header-ios-original.png
deleted file mode 100644
index dea4d1106..000000000
Binary files a/media/img/welcome/header-ios-original.png and /dev/null differ
diff --git a/media/img/welcome/header-ios.png b/media/img/welcome/header-ios.png
deleted file mode 100644
index 4ce48e651..000000000
Binary files a/media/img/welcome/header-ios.png and /dev/null differ
diff --git a/media/img/welcome/subfeature_10.png b/media/img/welcome/subfeature_10.png
index 2855ba14b..26efd865c 100644
Binary files a/media/img/welcome/subfeature_10.png and b/media/img/welcome/subfeature_10.png differ
diff --git a/media/img/welcome/welcome-android.png b/media/img/welcome/welcome-android.png
new file mode 100644
index 000000000..c6eb16173
Binary files /dev/null and b/media/img/welcome/welcome-android.png differ
diff --git a/media/img/welcome/welcome-ios.png b/media/img/welcome/welcome-ios.png
new file mode 100644
index 000000000..d92f57437
Binary files /dev/null and b/media/img/welcome/welcome-ios.png differ
diff --git a/media/img/welcome/welcome-mac.png b/media/img/welcome/welcome-mac.png
new file mode 100644
index 000000000..433bebb70
Binary files /dev/null and b/media/img/welcome/welcome-mac.png differ
diff --git a/media/js/newsblur/reader/reader.js b/media/js/newsblur/reader/reader.js
index 9433ab7fd..d132a6762 100644
--- a/media/js/newsblur/reader/reader.js
+++ b/media/js/newsblur/reader/reader.js
@@ -2659,7 +2659,7 @@
send_story_to_twitter: function (story_id) {
var story = this.model.get_story(story_id);
- var url = 'https://twitter.com/intent/tweet';
+ var url = 'https://x.com/intent/post';
var twitter_url = [
url,
'?text=',
diff --git a/media/js/newsblur/reader/reader_tutorial.js b/media/js/newsblur/reader/reader_tutorial.js
index 9acd21772..061588046 100644
--- a/media/js/newsblur/reader/reader_tutorial.js
+++ b/media/js/newsblur/reader/reader_tutorial.js
@@ -281,11 +281,11 @@ _.extend(NEWSBLUR.ReaderTutorial.prototype, {
$.make('div', { className: 'NB-page NB-page-5' }, [
$.make('h4', 'Stay connected to NewsBlur on Twitter'),
$.make('div', { className: 'NB-tutorial-twitter' }, [
- $.make('a', { className: 'NB-splash-link', href: 'http://twitter.com/samuelclay', target: '_blank' }, [
+ $.make('a', { className: 'NB-splash-link', href: 'https://x.com/samuelclay', target: '_blank' }, [
$.make('img', { src: NEWSBLUR.Globals.MEDIA_URL + '/img/static/Samuel%20Clay%20sq.jpg', style: 'border-color: #505050;' }),
$.make('span', '@samuelclay')
]),
- $.make('a', { className: 'NB-splash-link', href: 'http://twitter.com/newsblur', target: '_blank' }, [
+ $.make('a', { className: 'NB-splash-link', href: 'http://x.com/newsblur', target: '_blank' }, [
$.make('img', { src: NEWSBLUR.Globals.MEDIA_URL + '/img/logo_128.png' }),
$.make('span', '@newsblur')
])
diff --git a/templates/502.html b/templates/502.html
index ee854855d..b867b23b6 100644
--- a/templates/502.html
+++ b/templates/502.html
@@ -67,7 +67,7 @@
502 · NewsBlur is down
diff --git a/templates/502.http b/templates/502.http
index 2be52389b..7a69d5365 100644
--- a/templates/502.http
+++ b/templates/502.http
@@ -72,7 +72,7 @@ Content-Type: text/html
502 · NewsBlur is down
diff --git a/templates/reader/footer.xhtml b/templates/reader/footer.xhtml
index 5178b3a8a..cee4ed794 100644
--- a/templates/reader/footer.xhtml
+++ b/templates/reader/footer.xhtml
@@ -5,11 +5,11 @@
API
iOS
Android
- GitHub
+ GitHub
Support
- The Blog
+ The Blog
Facebook
-
+
diff --git a/templates/reader/welcome.xhtml b/templates/reader/welcome.xhtml
index d84ea7eec..5151461f1 100644
--- a/templates/reader/welcome.xhtml
+++ b/templates/reader/welcome.xhtml
@@ -59,13 +59,13 @@
@@ -197,9 +197,9 @@
Regularly used searches are conveniently given their own feeds
-

-
First-class iOS App
-
The NewsBlur iOS app is free and is jam-packed with features
+

+
Native iOS/macOS Apps
+
The NewsBlur iOS and macOS apps are free and jam-packed with features

@@ -207,7 +207,7 @@
The original story from truncated RSS feeds is seamlessly expanded
-

+
First-class Android App
The NewsBlur Android app is free and has it all
@@ -238,7 +238,7 @@

-
Twitter & YouTube
+
YouTube
Even sites that don't publish RSS feeds can be followed
@@ -362,11 +362,11 @@